templo perdido 3c ai cómo usarlo
Lo transferí de esta publicación en http://bbs.wow8.org/thread-152120-1-1.html que es muy detallada, puedes echarle un vistazo.
★ 1★programa principal
Shingo Jass Highlighter 0.41
la función principal no toma nada y no devuelve nada
set ai_player=Player(GetAiPlayer())
establecer start_loc=GetStartLocationLoc(GetPlayerStartLocation(Player(GetAiPlayer()-10)))
si GetPlayerController(Player(GetAiPlayer()-10))==MAP_CONTROL_COMPUTER entonces
set ally =true
endif
call SetMeleeAI() //Comienza la batalla contra la IA
call SetDefendPlayer(true) //Establece la defensa de la unidad al atacar
call SetHeroesBuyItems(true) //Configurar héroes para que compren artículos automáticamente
call SetHeroesFlee(true) //Configurar héroes para que huyan automáticamente cuando su salud sea baja
call SetHeroesTakeItems(true) //Configurar que los héroes recojan objetos automáticamente
call SetIgnoreInjured(true) //Configurar unidades para que ignoren el daño (la sangre roja no correrá automáticamente durante el combate)
call SetPeonsRepair(true) //Configurar a los agricultores para que reparen automáticamente
call SetRandomPaths(true) //Establecer una ruta aleatoria (se estima que es una ruta aleatoria para atacar y escapar)
call SetSmartArtillery(true) //Establece un ataque de artillería inteligente. (Si estás demasiado cerca, ¿te alejarás para atacar?)
call SetTargetHeroes(true) //Establece el objetivo del héroe.
(¿Es el objetivo principal?)
call SetUnitsFlee(true) //Configura la unidad para escapar
call SetWatchMegaTargets(true) //Comienza a luchar contra la IA
call SetCaptainChanges (true) // Establece la unidad de monitoreo (primaria).
call CreateCaptains() // Crea un capitán (como un héroe liderando soldados)
call StartThread(función attack_loop) // Inicia el hilo y ejecuta (función attack_loop)
llamar a StartThread(función check_hp) // Iniciar hilo, ejecutar (función check_hp)
endfunction
★2★Variables globales
Shingo Jass Highlighter 0.41
globals
matriz de unidades aihero //Establece la unidad de héroe
entero hero_num=0 //Se utiliza para calcular el número de héroes
group udg_g= CreateGroup() //Se utiliza para registrar todas las unidades de jugadores de IA
boolean Flee=false //Establece si huir
boolean FinishMF=false //Establece si to MF
boolean attack_enemy=false //Establece si atacar al enemigo
boolean ally=false //Establece si ataca al aliado
real ratio= 1 //radio es un número entero utilizado para determinar el índice de salud
integer count=0 //Registra los segundos cuando comienza el juego
ubicación start_loc //El lugar donde comienza el jugador
endglobals
★3 ★Programa de funciones
Shingo Jass Highlighter 0.41
la función setup_force no toma nada y no devuelve nada //Los jugadores de IA comienzan a buscar para héroes con salud superior a 15 que puedan atacar para ingresar al grupo de ataque
unidad local u=null
entero local i=1
llame a RemoveInjuries()
llamar a InitAssault() //Inicializar el equipo de ataque
if (GetPlayerState(ai_player, PLAYER_STATE_RESOURCE_FOOD_CAP)-80)!=hero_num luego
llamar a GroupEnumUnitsOfPlayer(udg_g , ai_player, null) //Selecciona todas las unidades del reproductor AI
bucle
p>exitwhen igt_num
>
llamar a GroupRemoveUnit(udg_g, aiherolt; igt;)
establecer i=i 1
endloop
bucle
establecer u=FirstOfGroup(udg_g)
salir cuando u==null
si IsUnitType(u, UNIT_TYPE_HERO)==true entonces
establecer hero_num=hero_num 1 p> p>
set aihero[hero_num]=u //Establecer aihero[1~n]=u
endif
call GroupRemoveUnit(udg_g,u) //Eliminar unit u
endloop
call GroupClear(udg_g) //Borrar el grupo de unidades
endif
set i=1
bucle
salir cuando igt; hero_num
if GetUnitState(aiherolt; igt;, UNIT_STATE_LIFE)/GetUnitState(aiherolt; igt;, UNIT_STATE_MAX_LIFE)gt; vida del héroe El porcentaje es mayor que 15 (la radio es un número entero que se usa para determinar el índice de salud)
call AddAssault(1, GetUnitTypeId(aiherolt;igt;)) //El héroe se une al grupo de ataque
endif
set i=i 1
endloop
endfunction
función start_attack toma el objetivo de la unidad y no devuelve nada //Iniciar ataque
local entero index=0
bucle
salir cuando CapitánRetreating() y huir //(Si el capitán está escapando y huir es verdadero) salir p>
salir cuando ratio==0
salir cuando no UnitAlive(objetivo) //(si el objetivo no está vivo) salir
salir cuando UnitInvis(objetivo) y no IsUnitDetected(objetivo) , ai_player) // (Si la unidad es invisible y única
(detección) y salir
llamar AttackMoveKill(objetivo) // Movimiento de ataque hasta que el objetivo muera
llamar a Sleep(3) //Detener durante 3 segundos
if indexgt;=5 entonces
establece index=0
llama a setup_force() //Ordena al jugador de IA que comience a buscar héroes con más de 15 vidas que puedan atacar ingresa al grupo de ataque
endif
set index=index 1
endloop //En realidad, la función de este bucle es seleccionar un héroe para atacar cada 3 segundos, y detente si escapas
set index=0
loop
exitwhen not CaptainInCombat(true) //Salir cuando el capitán no esté peleando p>
llamar a Sleep(2) //Detener 3 segundos
si indexgt;=8 entonces
establecer index=0
llamar a setup_force() //Ordena al jugador de IA que comience a buscar héroes con más de 15 vidas que puedan atacar Ingresa al grupo de ataque
endif
set index=index 1
endloop // De hecho, la función de este bucle es que el capitán selecciona un héroe para ingresar cada 2 segundos durante la batalla. Grupo de ataque
endfunction
función attack_sequence no recibe retornos. nada // Secuencia de combate (esta función en realidad es encontrar al enemigo, primero busque la subbase del enemigo, si no, vaya a la base principal, si no la encuentra, simplemente vaya a MF)
unidad local target=null
unidad local u=null
if ally entonces //Si ally es verdadero, realiza las siguientes acciones
set target=GetAllianceTarget() / /Establece el objetivo como base principal de la alianza
if target!=null entonces //Si la base principal de la alianza existe, realiza las siguientes acciones
p>
set attack_enemy=true //Establece el ataque del enemigo para comenzar
call setup_force() //Comando
Deje que el jugador de IA comience a buscar héroes con una salud superior a 15 que puedan atacar para ingresar al grupo de ataque
llame a start_attack(target) //Llame a la función para comenzar a atacar al objetivo
call SetAllianceTarget(null) //
set attack_enemy=false //Desactiva el ataque enemigo
return //Omite las siguientes acciones
endif p>
endif
if countgt; 100 and GetRandomInt(0, 200 count)gt; 300 then //Si el recuento es mayor que 100 y el número entero aleatorio 0 o 200 es mayor que 300, hazlo las siguientes acciones
set u=CreateUnitAtLoc( ai_player, 'h000', start_loc, 270) //Establece u como la nueva unidad en el punto de partida
set target=GetEnemyExpansion( ) //Establece el objetivo para que sea la subbase del enemigo
si el objetivo!=null entonces //*Si el objetivo existe, realiza las siguientes acciones
llama a KillUnit(u) // Matarte
llamar a SetAllianceTarget(target) //
llamar a setup_force() //Ordena al jugador de IA que comience a buscar héroes con una salud superior a 15 que puedan atacar para entrar el grupo de ataque
llama a start_attack(target) //Llama a la función para comenzar a atacar al objetivo
return //Omite las siguientes acciones
else //* Si el objetivo no existe, realiza las siguientes acciones
llamar a StartGetEnemyBase() //Empezar a buscar la base enemiga
bucle
salir cuando no WaitGetEnemyBase() //Salir del bucle cuando no estés buscando enemigos
call Sleep(1)
endloop // En realidad, determina si se encuentra el héroe cada segundo
set target=GetEnemyBase() //Establecer. El objetivo es la base principal del enemigo
call KillUnit(u) //Kill u
endif
set u=null
if target != null entonces //Si el objetivo no es igual a ninguno, realiza las siguientes acciones
set attack_enemy=true //Configurado para comenzar a atacar al enemigo
call SetAllianceTarget(target) // p>
llamar a setup_force() // Ordena al jugador de IA que comience a buscar héroes con una salud superior a 15 que puedan atacar para ingresar al grupo de ataque
llamar a start_attack(target ) //Llama a la función para comenzar a atacar al objetivo
set attack_enemy=false //Desactiva el ataque del enemigo
return //Omite las siguientes acciones
endif
endif
set target=GetCreepCamp(0, R2I(5*hero_num*ratio), false) //Establece que el objetivo sea el campamento de la unidad enemiga neutral (el mínimo El nivel de la unidad neutral es 0, el máximo es 5*número total de héroes*proporción, no hay unidades voladoras)
if target!=null entonces //Si el objetivo existe, realiza las siguientes acciones
llamar a SetAllianceTarget(objetivo) //
llamar a setup_force() / /Ordena al jugador de IA que comience a buscar héroes con una salud superior a 15 que puedan atacar para atacar
Grupo
call start_attack(target) //Llama a la función para comenzar a atacar al objetivo
set finishMF=true //Establece MF en verdadero (MF se refiere a matar monstruos neutrales para mejorar) < / p>
return //Omita las siguientes acciones
endif
if GetRandomInt(1, 2)==1 then //Si el entero aleatorio 1 o 2 es igual a 1, haz la siguiente acción
set target=GetCreepCamp(0, R2I(8*hero_num*ratio), false) //Establece que el objetivo sea el campamento de la unidad hostil neutral
if target!=null entonces / /Si el objetivo existe, realice las siguientes acciones
llame a SetAllianceTarget(target) //
llame a setup_force() //Comanda la IA el jugador comienza a buscar héroes con más de 15 vidas que puedan atacar y atacar al grupo
call start_attack(target) //Llama a la función para comenzar a atacar al objetivo
set finishMF= true //Establece MF en verdadero (MF se refiere a matar monstruos neutrales para mejorar) p>
endif
endif
call Sleep(10) //Detente por 10 segundos
función final
función attack_loop no toma nada y no devuelve nada
índice entero local=0
llamada a SetCaptainHome(0, GetLocationX(start_loc) , GetLocationY(start_loc)) //Establece el punto de inicio del grupo lt; group, coordenada x, coordenada y gt;
call SetCaptainHome(1, GetLocationX(start_loc), GetLocationY(start_loc)) //Establece el punto de inicio del grupo lt; grupo, coordenada x, coordenada y gt; parámetros del grupo: ATTACK_CAPTAIN = 1; grupo de ataque DEFENSE_CAPTAIN;
= 2; Grupo de defensa BOTH_CAPTAINS = 3 Grupo de ataque y defensa;
bucle
llamada Sleep(3) //Detente durante 3 segundos (en realidad ingresa al bucle y realiza las siguientes acciones cada vez). 3 segundos una vez)
exitwhen GetPlayerState(ai_player, PLAYER_STATE_RESOURCE_FOOD_CAP)gt; 80 //Salir del bucle cuando el jugador AI tenga más de 80 alimentos
endloop
llamar a Sleep(2) //Parar durante 2 segundos
llamar a setup_force() //Ordenar al jugador de IA que comience a buscar héroes con vidas superiores a 15 que puedan atacar y entrar en el grupo de ataque
bucle
set index=1
bucle
call Sleep(1) //Detener durante 1 segundo
salir cuando finalice MF y no huya //Cuando MF esté en progreso y no huya Salga del ciclo cuando sea verdadero
llame a Sleep(1) //Deténgase durante 1 segundo
salga cuando not CaptainRetreating() and ratiogt 0 //Cuando el capitán no escapa y la proporción es mayor que Salir del ciclo cuando 0
exitwhen indexgt;=10
set index=index 1
endloop
if finishMF then //Si eres MF, realiza las siguientes acciones
set FinishMF=false //Establece FinishMF=false
endif
if huye entonces //Si estás huyendo, haz la siguiente acción
call Sleep(25-ratio*20) //Detente durante 25-ratio* 20 segundos (la radio es un número entero que se utiliza para determinar la proporción de vida)
endif
call attack_sequence() // Llamar a la función de ataque
endloop
función final
función check_hp t
no hace nada y no devuelve nada //Detecta Hp
local entero i=0
local real x=0
local real y=0
local real z=0
local real r1=0
local real r2=0
unidad local u=null
bucle
call Sleep(3) //Detente durante 3 segundos (en realidad ingresa al bucle y realiza las siguientes acciones cada 3 segundos)
set u=GetCreepCamp(0, 0, false) //Establecerte como objetivo neutral y hostil
establecer i=1
establecer x=0
establecer y=0
set z =0
loop
exitwhen igt; hero_num //Salir del ciclo cuando i sea mayor que el número total de héroes
set r1=GetUnitState( aiherolt; igt;, UNIT_STATE_LIFE) //Establece r1 como el valor de salud actual del héroe i (i=1, 2.3,...)
set r2=GetUnitState(aiherolt;igt;, UNIT_STATE_MAX_LIFE) //Establecer r2 es el valor de salud máximo del héroe i (i=1, 2.3,...)
set x=x r1 //Establecer x igual a x r1, que es la salud total de todos los héroes después del ciclo Valor de salud
set y=y r2 //Establece y igual a x r2, que es el valor de salud máximo total de todos los héroes después del ciclo
if r1gt ; 0 entonces // Si la vida del héroe es mayor que 0, realiza las siguientes acciones
set z=z r2 //Establece z igual a z r2, que es el valor de salud máximo total de todos los héroes vivos después del ciclo
endif
p>set i=i 1
endloop
if zgt entonces // Si Z es mayor que 0, realice las siguientes acciones
set ratio=x /y //Establezca la relación igual a x/y, es decir, la relación entre el valor de salud actual y el valor de salud máximo de todos los héroes
i
f x/zlt; 0.5 then //Si la proporción entre la salud actual y la salud máxima de todos los héroes es inferior a 0,5, realiza las siguientes acciones
call SetGroupsFlee(true) //Prepara el equipo para escapar
p>set gone=true //Configura el equipo para que pueda huir
else
call SetGroupsFlee(false) //Si no, configura el equipo para que no pueda huir huir
set seek=false //Configura el equipo para que no huya ahora
endif
else //Si Z es menor que 0, haz lo siguiente acciones
set ratio=0 //Establecer radio en 0
call SetGroupsFlee(true) //Configurar el equipo para huir
set seek=true / /Configura el equipo para que huya ahora
endif //Actual El valor de salud se determina cada tres segundos
si attack_enemy entonces
llama a SetGroupsFlee(true) / /Si ataca al enemigo
set seek=true //Set El equipo puede escapar
endif
si cuenta 200 entonces
establece count=count 1
endif //en realidad cada tres segundos Solo configura el count 1
endloop
endfunction
Recopila y comparte 11 0 Yumei Moyu