29/05/2024

JASS – Al morir da oro a tu equipo

0

Para implementar un sistema en Warcraft 3 donde, cuando un jugador muere, su oro y madera se transfieran a los miembros de su mismo equipo, necesitarás una serie de pasos y un diseño detallado. Aquí hay un esbozo básico de cómo podrías hacerlo en JASS:

  1. Definir una estructura de datos para almacenar los recursos de los jugadores:Crea una estructura que almacene el oro y la madera de cada jugador. Puedes utilizar un array o una estructura personalizada para esto.
struct PlayerResources
    real gold
    real wood
endstruct

PlayerResources playerResources[12] // Un array para almacenar los recursos de los 12 jugadores (6 por equipo)

Asignar recursos iniciales:

Al inicio del mapa, asigna una cantidad inicial de oro y madera a cada jugador.

function InitialResourceAllocation takes nothing returns nothing
    // Asigna recursos iniciales a cada jugador
    set playerResources[0].gold = 1000.0 // Por ejemplo, 1000 de oro
    set playerResources[0].wood = 500.0 // Por ejemplo, 500 de madera
    // Repite esto para todos los jugadores
endfunction

Manejar la muerte de un jugador:

Crea un evento que se active cuando un jugador muere. Puedes usar el evento EVENT_PLAYER_UNIT_DEATH para esto.

function HandlePlayerDeath takes nothing returns nothing
    local unit deadUnit = GetDyingUnit()
    local integer playerIndex = GetPlayerId(GetOwningPlayer(deadUnit))
    local integer team = GetPlayerTeam(GetOwningPlayer(deadUnit))

    // Transfiere los recursos del jugador muerto a sus compañeros de equipo
    local integer i
    loop
        exitwhen i == 6
        if GetPlayerTeam(GetPlayer(i)) == team and GetPlayerId(GetPlayer(i)) != playerIndex then
            playerResources[playerIndex].gold = playerResources[playerIndex].gold + playerResources[i].gold
            playerResources[playerIndex].wood = playerResources[playerIndex].wood + playerResources[i].wood
            playerResources[i].gold = 0.0
            playerResources[i].wood = 0.0
        endif
        set i = i + 1
    endloop
endfunction

Asociar el evento a los jugadores:

Registra el evento EVENT_PLAYER_UNIT_DEATH para cada jugador en el mapa.

function RegisterPlayerDeathEvents takes nothing returns nothing
    local integer i
    loop
        exitwhen i == 12
        call TriggerRegisterPlayerUnitEvent(CreateTrigger(), Player(i), EVENT_PLAYER_UNIT_DEATH, null)
        call TriggerAddAction(GetLastCreatedTrigger(), function HandlePlayerDeath)
        set i = i + 1
    endloop
endfunction

Inicializar el sistema:

En el evento de inicio del mapa, llama a las funciones para asignar recursos iniciales y registrar eventos de muerte de jugadores.

function InitMap takes nothing returns nothing
    call InitialResourceAllocation()
    call RegisterPlayerDeathEvents()
endfunction

Este es un esquema básico del sistema. Necesitarás personalizarlo según las necesidades de tu mapa y agregar manejo de errores, mensajes para los jugadores y otras funcionalidades específicas que desees implementar. Además, ten en cuenta que este código no considera la implementación de restricciones de transferencia de recursos, como si los recursos se dividen por igual o si hay alguna restricción de distancia. Puedes ajustar estos aspectos según las reglas de tu juego.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *