por que tengo este error?

Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Claro, aquí te proporciono una lista de las mazmorras heroicas de World of Warcraft: Wrath of the Lich King (WOTLK) con sus respectivas Zone ID:

1. Ahn'Kahet: El Antiguo Reino (Heroico) - Zone ID: 4494
2. Azjol-Nerub (Heroico) - Zone ID: 4273
3. Ciudadela de la Corona de Hielo: Las Cámaras de Reflexión (Heroico) - Zone ID: 4820
4. Drak'Tharon (Heroico) - Zone ID: 4196
5. El Bastión Violeta (Heroico) - Zone ID: 4415
6. El Foso de Saron (Heroico) - Zone ID: 4813
7. El Nexo (Heroico) - Zone ID: 4120
8. El Oculus (Heroico) - Zone ID: 4228
9. Fortaleza Drak'Tharon (Heroico) - Zone ID: 4375
10. Fortaleza Violeta (Heroico) - Zone ID: 4416
11. Gundrak (Heroico) - Zone ID: 4375
12. La Cámara de Piedra (Heroico) - Zone ID: 4264
13. La Forja de Almas (Heroico) - Zone ID: 4812
14. La Matanza de Stratholme (Heroico) - Zone ID: 4100
15. La Prueba del Campeón (Heroico) - Zone ID: 4722
16. Los Amplios Campos de Batalla de la Muerte (Heroico) - Zone ID: 4197
17. Naxxramas (Heroico) - Zone ID: 3456
18. Palacio de los Kirin Tor (Heroico) - Zone ID: 4293
19. Pináculo Utgarde (Heroico) - Zone ID: 1196
20. Prueba de la Cruzada (Heroico) - Zone ID: 4722
21. Ulduar (Heroico) - Zone ID: 4273
22. Utgarde (Heroico) - Zone ID: 206

Recuerda que las ID de las zonas se pueden utilizar para realizar un teletransporte a esa zona específica a través de un comando de teletransporte en el juego, o para programar scripts personalizados relacionados con esas zonas.
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

me da error: lua_scripts/Zone_Buff.lua:6: '}' expected (to close '{' at line 3) near '['
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

me da error: lua_scripts/Zone_Buff.lua:6: '}' expected (to close '{' at line 3) near '['
El problema que estás experimentando es debido a la falta de comas para separar los elementos en el diccionario `zoneBuffs`. En Lua, cada par de la forma `[key] = value` debe ser separado por una coma. Adicionalmente, tienes duplicadas las zonas 4375, 4722 y 4273, si eso no es intencional deberías corregirlo.

A continuación, te muestro cómo debería verse el código corregido:

```lua
local zoneBuffs = {
[3959] = {73822},
[4494] = {73822},
[4273] = {73822},
[4820] = {73822},
[4196] = {73822},
[4415] = {73822},
[4813] = {73822},
[4120] = {73822},
[4228] = {73822},
[4375] = {73822},
[4416] = {73822},
[4264] = {73822},
[4812] = {73822},
[4100] = {73822},
[4722] = {73822},
[4197] = {73822},
[3456] = {73822},
[4293] = {73822},
[1196] = {73822},
[206] = {73822}
}

local PLAYER_EVENT_ON_UPDATE_ZONE = 27

local function zoneBuff(event, player, newZone, newArea)
if player:IsDead() then --check if dead
return
end

for zone, buffs in pairs(zoneBuffs) do
if newZone ~= zone then -- not in zone remove buff
for _, buff in pairs(buffs) do
player:RemoveAura(buff)
end
else
for _, buff in pairs(buffs) do --if in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_UPDATE_ZONE, zoneBuff)
```

Eso debería solucionar el error que estás viendo.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
El problema que estás experimentando es debido a la falta de comas para separar los elementos en el diccionario `zoneBuffs`. En Lua, cada par de la forma `[key] = value` debe ser separado por una coma. Adicionalmente, tienes duplicadas las zonas 4375, 4722 y 4273, si eso no es intencional deberías corregirlo.

A continuación, te muestro cómo debería verse el código corregido:

```lua
local zoneBuffs = {
[3959] = {73822},
[4494] = {73822},
[4273] = {73822},
[4820] = {73822},
[4196] = {73822},
[4415] = {73822},
[4813] = {73822},
[4120] = {73822},
[4228] = {73822},
[4375] = {73822},
[4416] = {73822},
[4264] = {73822},
[4812] = {73822},
[4100] = {73822},
[4722] = {73822},
[4197] = {73822},
[3456] = {73822},
[4293] = {73822},
[1196] = {73822},
[206] = {73822}
}

local PLAYER_EVENT_ON_UPDATE_ZONE = 27

local function zoneBuff(event, player, newZone, newArea)
if player:IsDead() then --check if dead
return
end

for zone, buffs in pairs(zoneBuffs) do
if newZone ~= zone then -- not in zone remove buff
for _, buff in pairs(buffs) do
player:RemoveAura(buff)
end
else
for _, buff in pairs(buffs) do --if in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_UPDATE_ZONE, zoneBuff)
```

Eso debería solucionar el error que estás viendo.
No funciona con varias zonas, pero no da lua error.
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
No funciona con varias zonas, pero no da lua error.
Lamento escuchar que sigues teniendo problemas. Basándome en tu script, parece que el problema podría estar en cómo se está manejando la actualización de la zona y la comprobación de las auras.

El evento `PLAYER_EVENT_ON_UPDATE_ZONE` se activa cuando un jugador cambia de zona, pero no cuando entra en el juego, por lo que si el jugador ya está en la zona cuando se carga el script, no se le aplicará el aura.

Además, el script intenta eliminar la aura cada vez que se produce una actualización de zona, lo cual puede no ser el comportamiento esperado.

Podrías probar a dividir la funcionalidad en dos partes: aplicar el aura cuando un jugador entra en la zona y eliminar el aura cuando sale de la zona. Aquí te dejo un ejemplo de cómo podrías hacer esto:

```lua
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player, newZone, newArea)
if player:IsDead() then --check if dead
return
end

local buffs = zoneBuffs[newZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end

local function removeZoneBuff(event, player, oldZone, oldArea)
local buffs = zoneBuffs[oldZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then remove buffs
if player:HasAura(buff) then
player:RemoveAura(buff)
end
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Este script debería aplicar el aura cuando el jugador entra en la zona y quitarla cuando sale de la zona. Si sigues teniendo problemas, te recomendaría que compruebes si las ID de las zonas y las auras son correctas y si los eventos se están activando correctamente.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Lamento escuchar que sigues teniendo problemas. Basándome en tu script, parece que el problema podría estar en cómo se está manejando la actualización de la zona y la comprobación de las auras.

El evento `PLAYER_EVENT_ON_UPDATE_ZONE` se activa cuando un jugador cambia de zona, pero no cuando entra en el juego, por lo que si el jugador ya está en la zona cuando se carga el script, no se le aplicará el aura.

Además, el script intenta eliminar la aura cada vez que se produce una actualización de zona, lo cual puede no ser el comportamiento esperado.

Podrías probar a dividir la funcionalidad en dos partes: aplicar el aura cuando un jugador entra en la zona y eliminar el aura cuando sale de la zona. Aquí te dejo un ejemplo de cómo podrías hacer esto:

```lua
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player, newZone, newArea)
if player:IsDead() then --check if dead
return
end

local buffs = zoneBuffs[newZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end

local function removeZoneBuff(event, player, oldZone, oldArea)
local buffs = zoneBuffs[oldZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then remove buffs
if player:HasAura(buff) then
player:RemoveAura(buff)
end
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Este script debería aplicar el aura cuando el jugador entra en la zona y quitarla cuando sale de la zona. Si sigues teniendo problemas, te recomendaría que compruebes si las ID de las zonas y las auras son correctas y si los eventos se están activando correctamente.
Añade las zonas al script:

[3959] = {73822},
[4494] = {73822},
[4273] = {73822},
[4820] = {73822},
[4196] = {73822},
[4415] = {73822},
[4813] = {73822},
[4120] = {73822},
[4228] = {73822},
[4375] = {73822},
[4416] = {73822},
[4264] = {73822},
[4812] = {73822},
[4100] = {73822},
[4722] = {73822},
[4197] = {73822},
[3456] = {73822},
[4293] = {73822},
[1196] = {73822},
[206] = {73822}
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
Añade las zonas al script:

[3959] = {73822},
[4494] = {73822},
[4273] = {73822},
[4820] = {73822},
[4196] = {73822},
[4415] = {73822},
[4813] = {73822},
[4120] = {73822},
[4228] = {73822},
[4375] = {73822},
[4416] = {73822},
[4264] = {73822},
[4812] = {73822},
[4100] = {73822},
[4722] = {73822},
[4197] = {73822},
[3456] = {73822},
[4293] = {73822},
[1196] = {73822},
[206] = {73822}
Lo siento por la confusión. Aquí está el script con las zonas añadidas:

```lua
local zoneBuffs = {
[3959] = {73822},
[4494] = {73822},
[4273] = {73822},
[4820] = {73822},
[4196] = {73822},
[4415] = {73822},
[4813] = {73822},
[4120] = {73822},
[4228] = {73822},
[4375] = {73822},
[4416] = {73822},
[4264] = {73822},
[4812] = {73822},
[4100] = {73822},
[4722] = {73822},
[4197] = {73822},
[3456] = {73822},
[4293] = {73822},
[1196] = {73822},
[206] = {73822}
}

local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player, newZone, newArea)
if player:IsDead() then --check if dead
return
end

local buffs = zoneBuffs[newZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end

local function removeZoneBuff(event, player, oldZone, oldArea)
local buffs = zoneBuffs[oldZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then remove buffs
if player:HasAura(buff) then
player:RemoveAura(buff)
end
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Con este script, cuando un jugador entra en una de las zonas especificadas, se le aplicará el aura con ID 73822 (si aún no la tiene). Cuando el jugador abandone la zona, se le quitará dicha aura.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Lo siento por la confusión. Aquí está el script con las zonas añadidas:

```lua
local zoneBuffs = {
[3959] = {73822},
[4494] = {73822},
[4273] = {73822},
[4820] = {73822},
[4196] = {73822},
[4415] = {73822},
[4813] = {73822},
[4120] = {73822},
[4228] = {73822},
[4375] = {73822},
[4416] = {73822},
[4264] = {73822},
[4812] = {73822},
[4100] = {73822},
[4722] = {73822},
[4197] = {73822},
[3456] = {73822},
[4293] = {73822},
[1196] = {73822},
[206] = {73822}
}

local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player, newZone, newArea)
if player:IsDead() then --check if dead
return
end

local buffs = zoneBuffs[newZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end

local function removeZoneBuff(event, player, oldZone, oldArea)
local buffs = zoneBuffs[oldZone]
if buffs then
for _, buff in pairs(buffs) do --if in zone then remove buffs
if player:HasAura(buff) then
player:RemoveAura(buff)
end
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Con este script, cuando un jugador entra en una de las zonas especificadas, se le aplicará el aura con ID 73822 (si aún no la tiene). Cuando el jugador abandone la zona, se le quitará dicha aura.
Si funciona, se puede hacer que solo aparezca el buff en modo heroico? las mazmorras tienen el mismo zone ID en normal y Heroico
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
Si funciona, se puede hacer que solo aparezca el buff en modo heroico? las mazmorras tienen el mismo zone ID en normal y Heroico
Sí, se puede hacer, pero requiere un poco más de trabajo. En TrinityCore, puedes usar el método `IsHeroic()` para verificar si la mazmorra en la que está el jugador está en modo heroico. Desafortunadamente, este método no está disponible en la API de Lua de TrinityCore, por lo que tendrías que escribir una extensión de C++ para exponer esta funcionalidad a Lua.

Sin embargo, hay una solución alternativa. Puedes verificar el nivel de la mazmorra en la que está el jugador. Las mazmorras heroicas de Wrath of the Lich King son de nivel 80, por lo que podrías hacer algo como esto:

```lua
local function applyZoneBuff(event, player, newZone, newArea)
if player:IsDead() or player:GetLevel() < 80 then -- Check if dead or below level 80
return
end

local instance = player:GetInstance()
if instance and instance:GetDifficulty() == DIFFICULTY_HEROIC then -- Check if in heroic instance
local buffs = zoneBuffs[newZone]
if buffs then
for _, buff in pairs(buffs) do -- If in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end
end
```
Por favor, ten en cuenta que `DIFFICULTY_HEROIC` es un valor constante que representa el modo heroico de una mazmorra o banda. Deberías reemplazarlo por el valor correcto en tu motor de juego.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Sí, se puede hacer, pero requiere un poco más de trabajo. En TrinityCore, puedes usar el método `IsHeroic()` para verificar si la mazmorra en la que está el jugador está en modo heroico. Desafortunadamente, este método no está disponible en la API de Lua de TrinityCore, por lo que tendrías que escribir una extensión de C++ para exponer esta funcionalidad a Lua.

Sin embargo, hay una solución alternativa. Puedes verificar el nivel de la mazmorra en la que está el jugador. Las mazmorras heroicas de Wrath of the Lich King son de nivel 80, por lo que podrías hacer algo como esto:

```lua
local function applyZoneBuff(event, player, newZone, newArea)
if player:IsDead() or player:GetLevel() < 80 then -- Check if dead or below level 80
return
end

local instance = player:GetInstance()
if instance and instance:GetDifficulty() == DIFFICULTY_HEROIC then -- Check if in heroic instance
local buffs = zoneBuffs[newZone]
if buffs then
for _, buff in pairs(buffs) do -- If in zone then apply buffs
if not player:HasAura(buff) then
player:AddAura(buff, player)
end
end
end
end
end
```
Por favor, ten en cuenta que `DIFFICULTY_HEROIC` es un valor constante que representa el modo heroico de una mazmorra o banda. Deberías reemplazarlo por el valor correcto en tu motor de juego.
Podemos hacer todo mas simple? todas las bandas y mazmorras nivel 80 obtengan el buff 73822 al entrar y desaparezca al salir?
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
Podemos hacer todo mas simple? todas las bandas y mazmorras nivel 80 obtengan el buff 73822 al entrar y desaparezca al salir?
Claro, podemos simplificar el script para aplicar el buff a jugadores en mazmorras o bandas de nivel 80 y eliminar el buff cuando salgan. No necesitamos un mapeo de zonas en este caso, así que el código quedaría de la siguiente manera:

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80

local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player, newZone, newArea)
local instance = player:GetInstance()
if instance and player:GetLevel() >= MIN_INSTANCE_LEVEL then -- check if in instance and level 80 or higher
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player, oldZone, oldArea)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Este script aplica el buff a los jugadores que entran en una instancia de nivel 80 o superior y lo elimina cuando salen. Recuerda que debes adaptar este código a las especificaciones de tu servidor y realizar pruebas para asegurarte de que funciona como esperas.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Claro, podemos simplificar el script para aplicar el buff a jugadores en mazmorras o bandas de nivel 80 y eliminar el buff cuando salgan. No necesitamos un mapeo de zonas en este caso, así que el código quedaría de la siguiente manera:

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80

local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player, newZone, newArea)
local instance = player:GetInstance()
if instance and player:GetLevel() >= MIN_INSTANCE_LEVEL then -- check if in instance and level 80 or higher
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player, oldZone, oldArea)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Este script aplica el buff a los jugadores que entran en una instancia de nivel 80 o superior y lo elimina cuando salen. Recuerda que debes adaptar este código a las especificaciones de tu servidor y realizar pruebas para asegurarte de que funciona como esperas.
lua_scripts/Zone_Buff_utgarde.lua:8: attempt to call method 'GetInstance' (a nil value)

trinitycore
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
lua_scripts/Zone_Buff_utgarde.lua:8: attempt to call method 'GetInstance' (a nil value)

trinitycore
Lamento la confusión, me equivoqué con la API de Lua de TrinityCore. Desafortunadamente, no se puede acceder directamente a la información de la instancia de un jugador desde Lua en TrinityCore.

En este caso, tendríamos que utilizar un enfoque diferente. Podríamos usar el mapa de ID de mazmorras. Aquí hay una lista de ID de mapas de mazmorras heroicas de Wrath of the Lich King:

```lua
local heroicMaps = {
[574] = true, -- Utgarde Keep
[575] = true, -- Utgarde Pinnacle
[576] = true, -- The Nexus
[578] = true, -- The Oculus
[599] = true, -- Drak'Tharon Keep
[600] = true, -- The Stonecore
[601] = true, -- Ahn'kahet: The Old Kingdom
[602] = true, -- Azjol-Nerub
[604] = true, -- Gundrak
[608] = true, -- Violet Hold
[615] = true, -- The Obsidian Sanctum
[616] = true, -- The Eye of Eternity
[619] = true, -- Ahn'Kahet: The Old Kingdom
[624] = true, -- Vault of Archavon
[631] = true, -- Icecrown Citadel
[632] = true, -- The Forge of Souls
[649] = true, -- Trial of the Crusader
[650] = true, -- Trial of the Champion
[668] = true, -- Halls of Reflection
[724] = true, -- The Ruby Sanctum
}
```
Podríamos comprobar si el jugador está en uno de estos mapas y si está en modo heroico. Aquí te dejo el código revisado:

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local heroicMaps = {
--add the IDs of the heroic dungeons maps
[574] = true,
[575] = true,
-- [...]
}

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and map:IsDungeon() and player:GetLevel() >= MIN_INSTANCE_LEVEL and heroicMaps[map:GetMapId()] then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Por favor verifica las ID de los mapas de las mazmorras heroicas y añádelas a la lista `heroicMaps` como se muestra en el ejemplo.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Lamento la confusión, me equivoqué con la API de Lua de TrinityCore. Desafortunadamente, no se puede acceder directamente a la información de la instancia de un jugador desde Lua en TrinityCore.

En este caso, tendríamos que utilizar un enfoque diferente. Podríamos usar el mapa de ID de mazmorras. Aquí hay una lista de ID de mapas de mazmorras heroicas de Wrath of the Lich King:

```lua
local heroicMaps = {
[574] = true, -- Utgarde Keep
[575] = true, -- Utgarde Pinnacle
[576] = true, -- The Nexus
[578] = true, -- The Oculus
[599] = true, -- Drak'Tharon Keep
[600] = true, -- The Stonecore
[601] = true, -- Ahn'kahet: The Old Kingdom
[602] = true, -- Azjol-Nerub
[604] = true, -- Gundrak
[608] = true, -- Violet Hold
[615] = true, -- The Obsidian Sanctum
[616] = true, -- The Eye of Eternity
[619] = true, -- Ahn'Kahet: The Old Kingdom
[624] = true, -- Vault of Archavon
[631] = true, -- Icecrown Citadel
[632] = true, -- The Forge of Souls
[649] = true, -- Trial of the Crusader
[650] = true, -- Trial of the Champion
[668] = true, -- Halls of Reflection
[724] = true, -- The Ruby Sanctum
}
```
Podríamos comprobar si el jugador está en uno de estos mapas y si está en modo heroico. Aquí te dejo el código revisado:

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local heroicMaps = {
--add the IDs of the heroic dungeons maps
[574] = true,
[575] = true,
-- [...]
}

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and map:IsDungeon() and player:GetLevel() >= MIN_INSTANCE_LEVEL and heroicMaps[map:GetMapId()] then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Por favor verifica las ID de los mapas de las mazmorras heroicas y añádelas a la lista `heroicMaps` como se muestra en el ejemplo.
lua_scripts/Zone_Buff_utgarde.lua:23: unexpected symbol near '`'
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
lua_scripts/Zone_Buff_utgarde.lua:23: unexpected symbol near '`'
Lo siento, parece que hubo un problema al copiar el código. No debería haber ningún carácter '`' en el código. Te proporciono nuevamente el código corregido sin el carácter '`':

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local heroicMaps = {
-- Añade las ID de los mapas de las mazmorras heroicas
[574] = true,
[575] = true,
-- [...]
}

local function applyZoneBuff(event, player)
local mapId = player:GetMapId()
if mapId and player:GetLevel() >= MIN_INSTANCE_LEVEL and heroicMaps[mapId] then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Como mencioné antes, asegúrate de completar el diccionario `heroicMaps` con todas las ID de las mazmorras heroicas que quieras cubrir en tu servidor.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Lo siento, parece que hubo un problema al copiar el código. No debería haber ningún carácter '`' en el código. Te proporciono nuevamente el código corregido sin el carácter '`':

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local heroicMaps = {
-- Añade las ID de los mapas de las mazmorras heroicas
[574] = true,
[575] = true,
-- [...]
}

local function applyZoneBuff(event, player)
local mapId = player:GetMapId()
if mapId and player:GetLevel() >= MIN_INSTANCE_LEVEL and heroicMaps[mapId] then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Como mencioné antes, asegúrate de completar el diccionario `heroicMaps` con todas las ID de las mazmorras heroicas que quieras cubrir en tu servidor.
El buff 73822 en cualquier mazmorra o banda?
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
El buff 73822 en cualquier mazmorra o banda?
Claro, modificar el script para aplicar el buff en cualquier mazmorra o banda es bastante sencillo. Solo necesitamos verificar si el jugador se encuentra en una mazmorra o banda sin verificar el ID del mapa. Aquí está el código modificado:

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and (map:IsDungeon() or map:IsBattleground()) and player:GetLevel() >= MIN_INSTANCE_LEVEL then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Este script aplicará el buff a todos los jugadores que entren en una mazmorra o banda y tengan nivel 80 o superior, y lo eliminará cuando salgan.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Claro, modificar el script para aplicar el buff en cualquier mazmorra o banda es bastante sencillo. Solo necesitamos verificar si el jugador se encuentra en una mazmorra o banda sin verificar el ID del mapa. Aquí está el código modificado:

```lua
local BUFF_ID = 73822
local MIN_INSTANCE_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and (map:IsDungeon() or map:IsBattleground()) and player:GetLevel() >= MIN_INSTANCE_LEVEL then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```
Este script aplicará el buff a todos los jugadores que entren en una mazmorra o banda y tengan nivel 80 o superior, y lo eliminará cuando salgan.
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Este Script funciona muy bien, pero editalo, borra el level de la mazmorra o banda y aplica que tienes que ser nivel 80 para obtener el buff
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Este Script funciona muy bien, pero editalo, borra el level de la mazmorra o banda y aplica que tienes que ser nivel 80 para obtener el buff
Por supuesto, podemos editar el script para que aplique el buff a los jugadores de nivel 80 sin importar el nivel de la mazmorra o banda. Aquí está el código actualizado:

```lua
local BUFF_ID = 73822
local MIN_PLAYER_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and (map:IsDungeon() or map:IsBattleground()) and player:GetLevel() >= MIN_PLAYER_LEVEL then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Con este script, cualquier jugador de nivel 80 o superior recibirá el buff al entrar en cualquier mazmorra o banda, y se le quitará el buff al salir.
 
Upvote 0
Desde
30 Oct 2022
Mensajes
260
Reacciones
60
Honor
52
Por supuesto, podemos editar el script para que aplique el buff a los jugadores de nivel 80 sin importar el nivel de la mazmorra o banda. Aquí está el código actualizado:

```lua
local BUFF_ID = 73822
local MIN_PLAYER_LEVEL = 80
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and (map:IsDungeon() or map:IsBattleground()) and player:GetLevel() >= MIN_PLAYER_LEVEL then
player:AddAura(BUFF_ID, player)
end
end

local function removeZoneBuff(event, player)
if player:HasAura(BUFF_ID) then
player:RemoveAura(BUFF_ID)
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Con este script, cualquier jugador de nivel 80 o superior recibirá el buff al entrar en cualquier mazmorra o banda, y se le quitará el buff al salir.
Perfecto ahora edita que:

del nivel 30 al 40 recibas el buff 73816 en bandas o mazmorras
del nivel 40 al 50 recibas el buff 73818 en bandas o mazmorras
del nivel 50 al 60 recibas el buff 73819 en bandas o mazmorras
del nivel 60 al 70 recibas el buff 73820 en bandas o mazmorras
del nivel 70 al 80 recibas el buff 73821 en bandas o mazmorras
del nivel 80 recibes el buff 73822 en bandas o mazmorras
 
Upvote 0

Alexstrasza

Inteligencia Artificial
Moderador
Desde
29 Mar 2023
Mensajes
967
Reacciones
246
Honor
82
Perfecto ahora edita que:

del nivel 30 al 40 recibas el buff 73816 en bandas o mazmorras
del nivel 40 al 50 recibas el buff 73818 en bandas o mazmorras
del nivel 50 al 60 recibas el buff 73819 en bandas o mazmorras
del nivel 60 al 70 recibas el buff 73820 en bandas o mazmorras
del nivel 70 al 80 recibas el buff 73821 en bandas o mazmorras
del nivel 80 recibes el buff 73822 en bandas o mazmorras
Claro, podemos hacerlo cambiando un poco el código para aplicar diferentes buffs dependiendo del nivel del jugador. Aquí está el código modificado:

```lua
local PLAYER_EVENT_ON_ENTER_ZONE = 27
local PLAYER_EVENT_ON_LEAVE_ZONE = 28

local function GetBuffId(level)
if level >= 80 then
return 73822
elseif level >= 70 then
return 73821
elseif level >= 60 then
return 73820
elseif level >= 50 then
return 73819
elseif level >= 40 then
return 73818
elseif level >= 30 then
return 73816
else
return nil
end
end

local function applyZoneBuff(event, player)
local map = player:GetMap()
if map and (map:IsDungeon() or map:IsBattleground()) then
local buffId = GetBuffId(player:GetLevel())
if buffId then
player:AddAura(buffId, player)
end
end
end

local function removeZoneBuff(event, player)
for i = 73816, 73822 do
if player:HasAura(i) then
player:RemoveAura(i)
end
end
end

RegisterPlayerEvent(PLAYER_EVENT_ON_ENTER_ZONE, applyZoneBuff)
RegisterPlayerEvent(PLAYER_EVENT_ON_LEAVE_ZONE, removeZoneBuff)
```

Este script otorgará un buff diferente a los jugadores que entran en una mazmorra o banda, dependiendo de su nivel, y eliminará cualquier buff existente cuando salgan.
 
Upvote 0

Crea una cuenta o inicia sesión para comentar

Debes ser usuario para poder dejar un comentario.

¡Regístrate!

Crea una cuenta en nuestra comunidad. ¡Es fácil!

Acceder

¿Ya tienes una cuenta? Accede aquí

4,411Temas
29,500Mensajes
17,849Usuarios
mesias192000Último usuario
Top