Wc3WoW Forum
Conectarse

Recuperar mi contraseña

Últimos temas
Buscar
 
 

Resultados por:
 


Rechercher Búsqueda avanzada

Chatbox

[Tutorial] Dañar a Unidad cuando entre a una Región

Ir abajo

Tema Resuelto [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Dannniel el Jue 23 Dic - 15:22

este tutorial lo hago para enseñales a hacer lo que dice el titulo:

hacer que al entrar una unidad a una region reciba daño lentamente con un efecto para que se vea mejor y que al salir de esa region deje de recibir daño (y tambien se quite el efecto)

para esto necesitamos:

World editor de Warcraft III The Frozen Throne (lo hice con el patch 1.24e)
Una pc que cumpla con los requisitos para poder usar Warcraft
Un monitor
bocinas o audifonos para escuchar musica mientras trabajamos :twisted:

Aqui esta el mapa de ejemplo para tener una mejor idea de lo que vamos a hacer [Tienes que estar registrado y conectado para ver este vínculo]

Ahora... podemos empezar con lo que se nos antoje, es preferible empezar con el terreno pero como es un mapa de ejemplo dejen el terreno como esta...
para hacer este mapa yo prefiero empezar con los detonadores... despues si necesito algunas variables o regiones las creo pero como ya lo hice pues... empezemos con las variables:

LAS VARIABLES

para el mapa que les di de ejemplo solo utilize 2 variables, si quieren las pueden copiar para ahorrar tiempo pero si quieren aprender lean lo siguiente:

Van a crear una varible tipo Boolean con el nombre que se les ocurra, yo la llame: unidad_debuff, los demas datos dejenlos como estan... esta variable es para las condiciones de los detonadores

la segunda variable sera tipo Special Effect (talves efecto especial en español... tengo el wc3 en ingles) el nombre es el que quieran... yo la puse como SpecialFX, no le muevan ningun otro dato...esta variable es para poder quitar el effecto que tendra la unidad que entre en la region

con esto tendremos terminadas las variables :santa:

REGIONES

yo solo utilize una region en mi mapa asi que... hagan una region en su mapa con el tamaño que quieran... siempre y cuando haya espacio para poner la unidad; despues le pueden poner otro terreno en donde esta la region para poder identificarla facilmente a la hora de jugar

UNIDADES

puse una asi que... pongan una unidad pero afuera de la region... de preferencia que tenga la suficiente vida para aguantar un buen rato mientras pierde su vida xD

LOS DETONADORES

En el mapa que les di de ejemplo solo utilize 4 detonadores... si hacen un mapa nuevo, es decir, empezar el tuto con un mapa nuevo desde el principio RECUERDEN QUITAR LOS DETONADORES QUE VIENEN POR DEFAULT

empiezen creando los 4 detonadores... yo los llame "unidad entra", "unidad sale" "damage" y "Efecto especial" (es importante que los tengan... aunque esten vacios pero que esten xD)

"Unidad entra"

"unidad entra" va a ser el detonador que accione el daño, para que funcione le ponemos de evento
Código:
Unit - A unit enters Region 000 <gen>
despues le podemos poner alguna condicion para especificar que tipo de unidad lo podra accionar o si tiene que ser la unidad de un jugador en especifico... en el ejemplo no tiene condiciones... si me dan ganas de enseñarles algunas condiciones editare el tema y las pondre... si ven este mensaje es porque aun no lo e hecho

continuamos: despues en accion vamos a darle un valor a la variable que hicimos (o que copiaste) ejemplo:
Código:
set unidad_debuff=false
esto hara que la variable "unidad_debuff" sea igual a false xD
despues pondresmos otra accion para hacer correr el detonador que hara el daño a la unidad... ejemplo:
Código:
Trigger - Run Damage <gen> (checking conditions)

(si todavia no le hacen nada al detonador no se preocupen... pero ya tiene que estar almenos con nombre) este detonador como lo dice, hace correr el detonador del daño (le puse damage porque no se puede escribir la "ñ" en el world editor... o almenos no en el mio) lo de "checking conditions" es para que cheque las condiciones del detonador (no... no las va a leer ¬¬!) lo que va a hacer al checar las condiciones es que el detonador va a funcionar siempre y cuando se cumplan las condiciones... sino no... despues continuaremos con el detonador "Damage"

"Damage"

este sera el detonador que le hara el daño a la unidad...

comencemos poniendo la condicion... ¿que porque no necesita evento? pues porque el detonador pasado lo hace correr... siempre y cuando se cumplan las condiciones

ahora si, la condicion: la condicion que le pondremos sera:
Código:
unidad_debuff=false
como el detonador pasado le aplico el valor de "false" a la variable "unidad_debuff" debe de funcionar de afuerzas el detonador xD despues les explicare para que la condicion :afro:

ahora hacemos la accion
Código:
Unit - Set life of (Entering unit) to ((Life of (Entering unit)) - 1.00)
esta accion dice que la unidad "enterind unit" (la unidad que entro en la region) va a tener la vida que tenia pero menos 1... traducido al español diria algo asi
Código:
unidad - establecer vida de (unidad en region) a ((vida de (unidad en region)) - 1.00)
espero hayan entendido

despues puse
Código:
Wait 0.01 seconds
esto para que espere 0.01s antes de seguir con lo que estaba haciendo... no importa donde lo pongan pero debe de ir antes de
Código:
Trigger - Run (This trigger) (checking conditions)
este detonador todavia no lo hagan... haganlo despues

continuamos con la accion que creara el efecto:
Código:
Special Effect - Create a special effect attached to the overhead of (Entering unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
este le dara un efecto a la unidad que esta en la region... despues a este efecto lo vamos a poner en una variable asi
Código:
Set SpecialFX = (Last created special effect)
(para eso era la variable que hiciste/copiaste)

ahora si va
Código:
Trigger - Run (This trigger) (checking conditions)
esto va a hacer que corra denuevo el detonador... siempre y cuando se cumplan las condiciones... lo del wait 0.01s es para que se repita cada 0.01s el detonador, de lo contrario no estoy seguro de lo que pase pero talves te salte error y se te crashea la compu por que el detonador se haria una i otra vez tan rapido que tu compu no lo aguantaria... o simplemente o funciona xD

despues va
Código:
Trigger - Run Efecto especial <gen> (checking conditions)
que va a accionar el detonador "efecto especial" este detonador lo que hace es quitarle el efecto pero como mientras el detonador "damage" siga corriendo el efecto volvera a aparecer... ahora sigue el detonador "efecto especial"

"efecto especial"

hagan lo siguente:
Código:
Custom script:  local effect tempEffect
Código:
Custom script:  set tempEffect = udg_SpecialFX
despues para esperar 0.1s
Código:
Wait 0.01 game-time seconds
y despues
Código:
Custom script:  set udg_SpecialFX = tempEffect
y al final
Código:
Special Effect - Destroy SpecialFX
de este detonador (efecto especial) no es puedo hablar mucho porque lo copie de un mapa de blizzard... solo les dire que tiene que ir aparte de los otros detonadores porque sino no funciona, intente poner los datos en el detonador "damage" pero al intentar probrarlo me salia un error...

ahora el ultimo detonador "unidad sale"

este detonador es para que cuando la unidad salga de la region
Código:
Unit - A unit leaves Region 000 <gen>
cambie el valor de "unidad_debuff" a true
Código:
Set Unidad_debuff = True
y al estar en true el detonador "damage" no podra funcionar... pues su condicion es que este en false, si entra la unidad denuevo a la region hara accionar al detonador "unidad entra" y este hace que la variable se ponga denuevo en false y corre denuevo al detonador "damage" y se repite denuevo el proceso...

ESPERO LES HAYA GUSTADO MI TUTORIAL PUES ME COSTO MUCHO ESCRIBIRLO :XDD:

Perdon por laz faltaz de hortografia

SALUDOS :zyppyyeah:
avatar
Dannniel
Rango: Teniente
Rango: Teniente

Título : Wc3WoW Programmer
Comentarios Comentarios : 251
Experiencia Experiencia : 3588
Reputación Reputación : 222
Horda Renegado Brujo Alquimia Masculino
Premio Wc3WoW Premio Wc3WoW
Vacío
Tercer Gran Photoman
Tercer Lore Master
Vacío Colaborador Destacado Tutor Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Metrallador_Killer_:( el Dom 26 Dic - 0:02

muy bueno gracias +rep (Y)
avatar
Metrallador_Killer_:(
Rango: Mariscal
Rango: Mariscal

Comentarios Comentarios : 345
Experiencia Experiencia : 2891
Reputación Reputación : 221
Alianza Humano Guerrero Masculino
Vacío
Team Fighter [2º Puesto]
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Asdf_guy el Dom 26 Dic - 11:51

Disculpa pero veo leaks en esos detonadores :< me pregunto si los puedes arreglar.
avatar
Asdf_guy
Rango: Peón
Rango: Peón

Comentarios Comentarios : 27
Experiencia Experiencia : 2756
Reputación Reputación : 22
Alianza Monje Masculino
Vacío

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Dannniel el Dom 26 Dic - 15:31

me intereso lo del lengaje JASS... aqui esta mi mapa en lenguaje JASS =)
Spoiler:
//===========================================================================
//
// Ejemplo de region que hace daño
//
// Warcraft III map script
// Generated by the Warcraft III World Editor
// Date: Thu Dec 23 13:39:31 2010
// Map Author: Dannniel
//
//===========================================================================

//***************************************************************************
//*
//* Global Variables
//*
//***************************************************************************

globals
// User-defined
boolean udg_Unidad_debuff = false
effect udg_SpecialFX = null

// Generated
rect gg_rct_Region_000 = null
trigger gg_trg_Damage = null
trigger gg_trg_Unidad_sale = null
trigger gg_trg_Unidad_entra = null
trigger gg_trg_Efecto_especial = null
endglobals

function InitGlobals takes nothing returns nothing
set udg_Unidad_debuff = false
endfunction

//***************************************************************************
//*
//* Unit Creation
//*
//***************************************************************************

//===========================================================================
function CreateUnitsForPlayer0 takes nothing returns nothing
local player p = Player(0)
local unit u
local integer unitID
local trigger t
local real life

set u = CreateUnit( p, 'Hpal', -275.5, -239.8, 314.032 )
endfunction

//===========================================================================
function CreatePlayerBuildings takes nothing returns nothing
endfunction

//===========================================================================
function CreatePlayerUnits takes nothing returns nothing
call CreateUnitsForPlayer0( )
endfunction

//===========================================================================
function CreateAllUnits takes nothing returns nothing
call CreatePlayerBuildings( )
call CreatePlayerUnits( )
endfunction

//***************************************************************************
//*
//* Regions
//*
//***************************************************************************

function CreateRegions takes nothing returns nothing
local weathereffect we

set gg_rct_Region_000 = Rect( -192.0, -64.0, 320.0, 448.0 )
endfunction

//***************************************************************************
//*
//* Triggers
//*
//***************************************************************************

//===========================================================================
// Trigger: Damage
//===========================================================================
function Trig_Damage_Conditions takes nothing returns boolean
if ( not ( udg_Unidad_debuff == false ) ) then
return false
endif
return true
endfunction

function Trig_Damage_Actions takes nothing returns nothing
call SetUnitLifeBJ( GetEnteringUnit(), ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnteringUnit()) - 1.00 ) )
call TriggerSleepAction( 0.01 )
call AddSpecialEffectTargetUnitBJ( "overhead", GetEnteringUnit(), "Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl" )
set udg_SpecialFX = GetLastCreatedEffectBJ()
call ConditionalTriggerExecute( GetTriggeringTrigger() )
call ConditionalTriggerExecute( gg_trg_Efecto_especial )
endfunction

//===========================================================================
function InitTrig_Damage takes nothing returns nothing
set gg_trg_Damage = CreateTrigger( )
call TriggerAddCondition( gg_trg_Damage, Condition( function Trig_Damage_Conditions ) )
call TriggerAddAction( gg_trg_Damage, function Trig_Damage_Actions )
endfunction

//===========================================================================
// Trigger: Unidad sale
//===========================================================================
function Trig_Unidad_sale_Actions takes nothing returns nothing
set udg_Unidad_debuff = true
endfunction

//===========================================================================
function InitTrig_Unidad_sale takes nothing returns nothing
set gg_trg_Unidad_sale = CreateTrigger( )
call TriggerRegisterLeaveRectSimple( gg_trg_Unidad_sale, gg_rct_Region_000 )
call TriggerAddAction( gg_trg_Unidad_sale, function Trig_Unidad_sale_Actions )
endfunction

//===========================================================================
// Trigger: Unidad entra
//===========================================================================
function Trig_Unidad_entra_Actions takes nothing returns nothing
set udg_Unidad_debuff = false
call ConditionalTriggerExecute( gg_trg_Damage )
endfunction

//===========================================================================
function InitTrig_Unidad_entra takes nothing returns nothing
set gg_trg_Unidad_entra = CreateTrigger( )
call TriggerRegisterEnterRectSimple( gg_trg_Unidad_entra, gg_rct_Region_000 )
call TriggerAddAction( gg_trg_Unidad_entra, function Trig_Unidad_entra_Actions )
endfunction

//===========================================================================
// Trigger: Efecto especial
//===========================================================================
function Trig_Efecto_especial_Actions takes nothing returns nothing
local effect tempEffect
set tempEffect = udg_SpecialFX
call PolledWait( 0.01 )
set udg_SpecialFX = tempEffect
call DestroyEffectBJ( udg_SpecialFX )
endfunction

//===========================================================================
function InitTrig_Efecto_especial takes nothing returns nothing
set gg_trg_Efecto_especial = CreateTrigger( )
call TriggerAddAction( gg_trg_Efecto_especial, function Trig_Efecto_especial_Actions )
endfunction

//===========================================================================
function InitCustomTriggers takes nothing returns nothing
call InitTrig_Damage( )
call InitTrig_Unidad_sale( )
call InitTrig_Unidad_entra( )
call InitTrig_Efecto_especial( )
endfunction

//***************************************************************************
//*
//* Players
//*
//***************************************************************************

function InitCustomPlayerSlots takes nothing returns nothing

// Player 0
call SetPlayerStartLocation( Player(0), 0 )
call SetPlayerColor( Player(0), ConvertPlayerColor(0) )
call SetPlayerRacePreference( Player(0), RACE_PREF_HUMAN )
call SetPlayerRaceSelectable( Player(0), true )
call SetPlayerController( Player(0), MAP_CONTROL_USER )

endfunction

function InitCustomTeams takes nothing returns nothing
// Force: TRIGSTR_002
call SetPlayerTeam( Player(0), 0 )

endfunction

//***************************************************************************
//*
//* Main Initialization
//*
//***************************************************************************

//===========================================================================
function main takes nothing returns nothing
call SetCameraBounds( -3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), -3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), -3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), -3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM) )
call SetDayNightModels( "Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl", "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl" )
call NewSoundEnvironment( "Default" )
call SetAmbientDaySound( "LordaeronSummerDay" )
call SetAmbientNightSound( "LordaeronSummerNight" )
call SetMapMusic( "Music", true, 0 )
call CreateRegions( )
call CreateAllUnits( )
call InitBlizzard( )
call InitGlobals( )
call InitCustomTriggers( )

endfunction

//***************************************************************************
//*
//* Map Configuration
//*
//***************************************************************************

function config takes nothing returns nothing
call SetMapName( "TRIGSTR_003" )
call SetMapDescription( "TRIGSTR_005" )
call SetPlayers( 1 )
call SetTeams( 1 )
call SetGamePlacement( MAP_PLACEMENT_USE_MAP_SETTINGS )

call DefineStartLocation( 0, -320.0, 128.0 )

// Player setup
call InitCustomPlayerSlots( )
call SetPlayerSlotAvailable( Player(0), MAP_CONTROL_USER )
call InitGenericPlayerSlots( )
endfunction

claro... lo hice con un programa pues apenas ando aprendiendo xD
avatar
Dannniel
Rango: Teniente
Rango: Teniente

Título : Wc3WoW Programmer
Comentarios Comentarios : 251
Experiencia Experiencia : 3588
Reputación Reputación : 222
Horda Renegado Brujo Alquimia Masculino
Premio Wc3WoW Premio Wc3WoW
Vacío
Tercer Gran Photoman
Tercer Lore Master
Vacío Colaborador Destacado Tutor Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Asdf_guy el Dom 26 Dic - 16:03

Utilizar programas alternos es bueno la verdad te aplaudo. Que bueno que te interesara. Saludines ^^
avatar
Asdf_guy
Rango: Peón
Rango: Peón

Comentarios Comentarios : 27
Experiencia Experiencia : 2756
Reputación Reputación : 22
Alianza Monje Masculino
Vacío

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Dockijoe el Vie 8 Feb - 13:01

Algo complicado pero nada que no pueda hacer +rep
avatar
Dockijoe
Rango: Héroe
Rango: Héroe

Título : Top 12
Comentarios Comentarios : 640
Experiencia Experiencia : 3111
Reputación Reputación : 235
Horda Orco Brujo Cocina Masculino
Vacío
Team Fighter [3º Puesto]
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Cefiro el Mar 26 Feb - 11:28

Buen tutorial
avatar
Cefiro
Rango: Leyenda
Rango: Leyenda

Título : Wc3WoW Champion
Comentarios Comentarios : 780
Experiencia Experiencia : 3391
Reputación Reputación : 432
Neutral Elfo de Sangre Brujo Encantamiento Masculino
Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW Premio Wc3WoW
Premio Wc3WoW Premio Wc3WoW Vacío Vacío Vacío Vacío
Forge Master
Primer Skinner Master
Forge Master Ultimate
Gran Colaborador Gladiador Ripper Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Nekkrov el Miér 27 Feb - 14:42

buen tutorial (Y) es una lastima que el ejemplo este en megaupload :(
avatar
Nekkrov
Rango: Élite
Rango: Élite

Título : Top 1 - Elite
Comentarios Comentarios : 1318
Experiencia Experiencia : 3028
Reputación Reputación : 143
Neutral Trol Cazador Desuello Masculino
Vacío
Segundo Gran Mapper II
Colaborador Destacado

Ver perfil de usuario

Volver arriba Ir abajo

Tema Resuelto Re: [Tutorial] Dañar a Unidad cuando entre a una Región

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.