A Community discussion forum for Halo Custom Edition, Halo 2 Vista, Portal and Halo Machinima

Home  Search Register  Login Member ListRecent Posts
  
 
»Forums Index »Halo Custom Edition (Bungie/Gearbox) »Halo CE General Discussion »Translation of Tutorial(Dwood Scripting Tutorial) completed

Author Topic: Translation of Tutorial(Dwood Scripting Tutorial) completed (6 messages, Page 1 of 1)
Moderators: Dennis

PRPatxi
Joined: Oct 30, 2010

Dennis, free me from this suffering


Posted: Dec 5, 2010 06:55 AM    Msg. 1 of 6       
Hello guys, this time is a Dwood tutorial, the one DFagent007 asked me to translate for him about Halo Scripting. I already had half done but due to an error it got deleted, so yeah I woke up today at 5 am and finish translating the whole 18 pages at 7:54 so here you guys can have it:(didn't have a lot of time thanks to UNI but...yeah

It's only a light ver so some stuff and comments where not translated which I will update in time:

Downloadable ver: http://www.megaupload.com/?d=O8G7FW1L

Tutorial de Scripts light ver.
By Dwood, traducción: Patxi

Algunas reglas a considerar:
(script continuous supbro
(begin
))
Nunca, pero nunca empieces un script de esa forma.

(script startup lamescript

)
(script startup lamescript2
(sleep_until human ai are allies to cyborg)
)
(script startup lamescript 3
(callscript)
)
En total, asumiendo q la sintaxis esta correcta, aun ay algo malo con estos scripts.
Explicacion larga:
Los Scripts de halo usan “threads”, cada vez que creas 3 scripts, como el de arriba(puede ser continuo), crea un “thread” en Halo donde cada uno se evalúa.
De forma elaborada:
(script continuous "a10b to a10a"
(if ( = (volume_test_objects "a10b to a10a" (list_get (players) 0 ) ) true )
(switch_bsp 0)
))
(script continuous "a10a to a10b"
(if ( = (volume_test_objects "a10a to a10b" (list_get (players) 0 ) ) true )
(switch_bsp 1)
))
(script continuous "a10c to a10b"
(if ( = (volume_test_objects "a10c to a10b" (list_get (players) 0 ) ) true )
(switch_bsp 1)
))
(script continuous "a10b to a10c"
(if ( = (volume_test_objects "a10b to a10c" (list_get (players) 0 ) ) true )
(begin (switch_bsp 2) (game_save) )
))
(script continuous "a10d to a10c"
(if ( = (volume_test_objects "a10d to a10c" (list_get (players) 0 ) ) true )
(switch_bsp 2)
))
“Estos pueden ser fuerte mente consolidados en un script continuo, ahorrando rendimiento” –Dwood en Modacity
So todos esos estaban en un mismo script continuo, pues entonces solo va a ver un solo hs_thread que el juego tenga que correr para ellos. En vez de actualizar 8 hs_threads en todo el juego, 1 hs_thread es actualizado( mas los otros scripts continuos que tengas, por ejemplo el de los AI). Solo hay 256 hs_threads disponibles y dos de ellos ya están reservados para el uso del sistema, así que solo terminas maximizando el juego. También, los scripts no están compilados en un código de maquina, están compilados en un árbol de sintaxis el cual el juego lo interpreta mientras corre.
Implementar algo en el tag data va a correr mucho más rápido que tratar de implementarlo en el script. Para poder poner el cambio del activador de volúmenes del bsp, tienes que seleccionar la definición de index(ficha) del activador de volúmenes, y después especificar el índice o ficha(index) de la fuente bsp hasta las destinación del bsp. Los índices(index) de la estructura del bsp están en 0.

Code:
// pretende que halo esta codeado en C#
void UpdateThe(s_hs_thread thread)
{
Console.WriteLine(" JAVA");
thread.Execute();
}
...
void Main
{
var hs_threads = GetTheThreads();
foreach(var thread in hs_threads)
UpdateThe(thread);

}
Y antes que trates de decir que es la misma cantidad de script compilado(el que de verdad importa); pues no es ni la misma cantidad! Por cada nueva función de script que definas, requieres 5+ nodos de script.
8*5=40
1*5=5
40-5=35
Tu method(define el método) esta consumiendo al menos 35 scripts extras, encima de los 7 hs_threads extras en el cual el juego tiene que iniciarse, actualizarse y deshacerse.
Si estás haciendo tus scripts, no te tientes a hacer muchos sripts que corran constantemente, va a decrecer el rendimiento de Halo a un nivel in-jugable.

Explicación corta:

Si tienes muchos scripts corriendo a la misma vez consolídalos! Bungie creo que solo usaba sobre 4 scripts continuos, si necesitas más de esos, vuelve a pensar en tus scripts.

Componentes especiales que igual te has dado cuenta:
(sleep_until []) -Adivina lo que eso hace! Le dice al juego cuantas veces debe de checar esa condición! Así que si lo que estas checando es de poca prioridad ponlo a 45 o más (recuerda el tiempo del juego de mide en “ticks”, 30 ticks son un segundo de juego) si tienes muchos “sleep_untils” checando cada tick, asegúrate que todo este en el mismo script para que no estropeen o bajen el rendimiento de tu juego (Te sorprenderías como tanto “poco”{se refiere poner muchas veces poca cantidad} de cosas como esta tienen importancia)
Regresando al los valores de los scripts que has llamado:
(cond ( ) [( ) [...]]) ←Básicamente lo que esto hace es regresar el “result” (resultado) del primer objeto (ítem) que lo evalúas a true(cierto). ¿Que significa esto? ¿Qué pasaría si quisieras un script que quieras q regrese un valor? Basicamente trabajaría como esto:
(script short this_script_returns_a_short
(cond ( true 500))
); nota que la segundas condiciones no son necesarias!

Hay una segunda forma (teóricamente) de regresar valores, una cosa en notar es que en el código de bungie para los scripts cuando regresan el jugador uno en el primer script…¿adivina qué? Al final de “player1” (jugador 1) es solo un objeto (ítem) no manejado, los scripts de Halo regresan al último valor “abierto”…
Esto no está probado y no sé si funciona pero si funciona debe de verse algo asi:
(script short this_script_returns_a_short
(500)
)
Solo nota que si llamas scripts como estos, debes estar listo para controlar los valores cuando los llames!
En la parte de abajo hay unos scripts interesantes que me han tenido allí por mucho, mucho, mucho tiempo:

Vamos a notar algunas cosas en esto:
(global boolean isOpenSauceRunning 0)
(global boolean game_ready 0)
(global boolean new_game 1)
(global boolean doors_placed 0)
(global boolean open_left 0)
(global boolean open_right 0)
(global boolean open_middle 0)
(global boolean enter_vehicle 0)
(global short doors_open 0)
He Declarado algunos globals (globales) aquí, todos menos los cortos. Algo que deves notar es que estoy usando nombres descriptivos! En el abrir de el escenario debes de saber a lo que me refiero!
(script static unit player0
(unit (list_get (players )0 ))
)
^Eso coge al jugador para que yo pueda interactuar con el/ella en los scripts, casteando el objeto jugador como una unidad, dejándolo “unhandled” (no manejable) de esa forma podemos llamarlo para que haga lo que quiera con el jugador
(script static void teleport_to_left
;;teleport to left door
(object_teleport (player0) flag_left))
(script static void teleport_to_middle
;;tele to middle door
(object_teleport (player0) flag_middle))
(script static void teleport_to_right
;;tele to right door
(object_teleport (player0) flag_right))
¿Si los scripts están llamados, que es lo que va a pasar? Mira la belleza de los nombres descriptivos y comentarios!!
(script static void check_for_dead_ai
(if (and (= (ai_living_count Concept_ai_Teleporters/left) 0) (= (device_get_position door_left) 0))
(begin
(teleport_to_left)
(device_set_position_immediate door_left 1)
(set open_left 1)
)
)
(if (and (= (ai_living_count Concept_ai_Teleporters/middle) 0) (= (device_get_position door_middle) 0))
(begin
(teleport_to_middle)
(device_set_position_immediate door_middle 1)
(set open_middle 1)
)
)
(if (and (= (ai_living_count Concept_ai_Teleporters/right) 0) (= (device_get_position door_right) 0))
(begin
(teleport_to_right)
(device_set_position_immediate door_right 1)
(set open_right 1)
)
)
)
Este ya es un poco más complicado pero aun así fácil de entender, ¿verdad? Si el concept_ai (concepto ai) en el tele transportador de la izquierda está muerto y la posición de la puerta de la izquierda está cerrada, teleporta el jugador a la sección izquierda y abre la puerta. Entonces pon el global “open_left true”.
Veo algunos sitios donde puedo optimizar esta sección y reducir código! ¿Los puedes ver?
(script static void place_ai
(ai_place Concept_ai_Teleporters/left)
(ai_place Concept_ai_Teleporters/middle)
(ai_place Concept_ai_Teleporters/right)
)
(script static void reset_d_value
(set doors_open 0)
(set open_left 0)
(set open_middle 0)
(set open_right 0)
)
;;could possibly set power to normal and THEN turn off the power once it opens all the way?
(script static void place_doors
(if (= doors_placed 0) (begin ( object_create door_middle ) ( object_create door_left ) ( object_create door_right ) ( set doors_placed 1 )))
(if (and (= open_middle 1) (= open_right 1) (= open_left 1)) (reset_d_var))
(if (= doors_open 3)
(begin (device_set_position door_middle 0) (device_set_position door_left 0) (device_set_position door_right 0) )
(begin (if (= (device_get_position door_middle) 1) (device_set_position_immediate door_middle 0))
(if (= (device_get_position door_left) 1) (device_set_position_immediate door_left 0))
(if (= (device_get_position door_right) 1) (device_set_position_immediate door_right 0))
(reset_d_var)
))
(device_set_power door_middle 0)
(device_set_power door_left 0)
(device_set_power door_right 0)
)
¿Savias que (and (conditions)) pueden obtener más de dos condiciones?


(script static void normal_setup
(place_ai)
(place_doors)
(set open_left 0)
(set open_middle 0)
(set open_middle 0)
)
(script continuous check_loop
(if (= game_ready 1)
(if (= new_game 1)
(begin
(set developer_mode 4)
(sleep 10)
(if (= developer_mode 4)
(normal_setup)
(normal_setup)
)
(set new_game 0)
)
(check_for_dead_ai)
)
;;Set the game up
;;Check the states of the ai
)
)
Santa madre! Casi estamos allí! Otra cosa para tener en cuenta: Halo script requiere de cualquier script llamado que ya este definido! La cosa más grande en este script, es la sección de (normal_setup)-es llamada dos veces, de esa forma en developer_mode (Halo Global es lo único editable en Open Sauce) esta puesto a 4, y corre igual (no le e añadido el soporte para open sauce aun)
(script continuous hello
(if (= enter_vehicle 1)
(begin
(ai_allegiance player human)
(ai_go_to_vehicle Hummans hoggy "driver")
(sleep 120)
(ai_command_list Hummans test)
(set enter_vehicle 0)
)
))
Esta parte es solo para probar si podía hacer que el ai guiara un Warhog apropiadamente. Penosamente no funciona muy bien.

A otro Script!
;;Any phrases you don't recognize (ie ;;stt, ;;end etc) are made for notepad++ use
;;If you don't feel like defining your own language for notepad++, setting language to LISP works just fine.
;;stt
(global boolean part_1 1)
(global boolean has_been_a1 1)
(global boolean has_been_a2 0)
(global boolean has_been_a3 0)
(global boolean has_been_a4 0)
(global boolean has_been_a5 0)
(global boolean followb 0)
(global boolean stayb 0)
(global boolean advanceb 0)
(global boolean retreatb 0)
(global boolean flankb 0)
(global short sleep_shorty 5)
(global short sleep_longer 35)
(global short sleep_ninety 90)
(global boolean cmd_mode 1)
(global boolean air_modes 0)
(global boolean debug 0) ;;test
(global boolean safe_to_go 1)
(global boolean alliez_r_at1 1)
(global boolean alliez_r_at2 0)
(global boolean alliez_r_at3 0)
(global boolean alliez_r_at4 0)
(global boolean alliez_r_at5 0)
(global short test_ais 1) ;; 1-5 only current possible
;;end

Por favor ten en cuenta las variables. En este nuevo script he combinado todos los booleans y les he dado ids (identificaciones) únicas para los estados en el que están – este script muestra las primeras etapas de esto.
Eso, y los comentarios solo toman un (1) semicolon{punto y coma}(;) para funcionar – era solo mi forma para ese tiempo de comentar.
Ahora salta todo esto y brinca hacia el primer continuo.
(script static void ai_migrate_a1_a2
(ai_command_list Alliez/Allies_1 Ai_go_2)
(ai_migrate Alliez/Allies_1 Alliez/Allies_2)
(set test_ais 2)
) (
script static void ai_migrate_a1_a3
(ai_command_list Alliez/Allies_1 Ai_go_3)
(ai_migrate Alliez/Allies_1 Alliez/Allies_3)
;;(hud_set_help_text shouldmove3)
(set test_ais 3)
) (
script static void ai_migrate_a1_a4
(ai_command_list Alliez/Allies_1 Ai_go_4)
(ai_migrate Alliez/Allies_1 Alliez/Allies_4)
;;(hud_set_help_text shouldmove4)
(set test_ais 4)
) (
script static void ai_migrate_a2_a1
(ai_command_list Alliez/Allies_2 Ai_go_1)
(ai_migrate Alliez/Allies_2 Alliez/Allies_1)
(set test_ais 1)
) (
script static void ai_migrate_a2_a3
(ai_command_list Alliez/Allies_2 Ai_go_3)
(ai_migrate Alliez/Allies_2 Alliez/Allies_3)
(set test_ais 3)
) (script static void ai_migrate_a2_a4
(ai_command_list Alliez/Allies_2 Ai_go_4)
(ai_migrate Alliez/Allies_2 Alliez/Allies_4)
(set test_ais 4)
) (
script static void ai_migrate_a3_a1
(ai_command_list Alliez/Allies_3 Ai_go_1)
(ai_migrate Alliez/Allies_3 Alliez/Allies_1)
(set test_ais 1)
) (
script static void ai_migrate_a3_a2
(ai_command_list Alliez/Allies_3 Ai_go_2)
(ai_migrate Alliez/Allies_3 Alliez/Allies_2)
(set test_ais 2)
) (
script static void ai_migrate_a3_a4
(ai_command_list Alliez/Allies_4 Ai_go_3)
(ai_migrate Alliez/Allies_4 Alliez/Allies_3)
(set test_ais 4)
) (
script static void ai_migrate_a4_a1
(ai_command_list Alliez/Allies_4 Ai_go_1)
(ai_migrate Alliez/Allies_4 Alliez/Allies_1)
(set test_ais 1)
)

Está empezando a tener sentido ahora – si el ai es un a4, muévelos a la localización a1, después mígralos de a4 a a1… pero espera! Qué significa eso de migrar los ai?
“(ai_migrate ) Hace todo o parte de que un encuentro de mueva a otro encuentro” –Halo Scripting Bible by Kornmanoo
Porque razón vamos a poner los ai en un nuevo encuentro? (abrir Sapien revela que cada encuentro tiene 5 posiciones de disparo, todas en diferentes partes del camino).
Eso significa que queremos que los ai estén en localizaciones limitadas – como si fueran puntos de disparo.
Vamos hacia el Segundo Script Continuo:
(script static void ai_migrate_a4_a2
(ai_command_list Alliez/Allies_4 Ai_go_2)
(ai_migrate Alliez/Allies_4 Alliez/Allies_2)
(set test_ais 2)
) (
script static void ai_migrate_a4_a3
(ai_command_list Alliez/Allies_4 Ai_go_3)
(ai_migrate Alliez/Allies_4 Alliez/Allies_3)
;;(hud_set_help_text shouldmove3)
(set test_ais 3)
) (
script static void ai_migrate_a4_a5
;; (ai_command_list Alliez/Allies_5 Ai_go_4)
;; (ai_migrate Alliez/Allies_5 Alliez/Allies_4)
(set test_ais 5)
) (
script static void ai_migrate_a5_a4
;; (ai_command_list Alliez/Allies_5 Ai_go_4)
;; (ai_migrate Alliez/Allies_5 Alliez/Allies_4)
(set test_ais 4)
) (
script static void ai_migrate_a5_a3
;;(ai_command_list Alliez/Allies_5 Ai_go_3)
;;(ai_migrate Alliez/Allies_5 Alliez/Allies_3)
;;(hud_set_help_text shouldmove3)
(set test_ais 3)
)
(script static void ai_migrate_a5_a2
;; (ai_command_list Alliez/Allies_5 Ai_go_2)
;; (ai_migrate Alliez/Allies_5 Alliez/Allies_2)
(set test_ais 2)
) (
script static void ai_migrate_a5_a1
;; (ai_command_list Alliez/Allies_5 Ai_go_1)
;; (ai_migrate Alliez/Allies_5 Alliez/Allies_1)
(set test_ais 1)
) ;;ai_commands
;;stt
;;stt compaction
;;stt statics for stay_s
;;end
(script static void stay_s
(set stayb 0)
) ;;stt Statics for follow_s
;;stt
(script static void area_One_test
(if (= test_ais 5)
(begin
(ai_migrate_a5_a1)
)
(if (= test_ais 4)
(begin
(ai_migrate_a4_a1)
)
(if (= test_ais 3)
(begin
(ai_migrate_a3_a1)
)
(if (= test_ais 2)
(begin
(ai_migrate_a2_a1)
)
)
)
)
)
) ;; (
hud_set_help_text shouldmove1)
) ;;end

Despues de evaluar este script, si test_ais = x entonces llama algo para hacer que el ai migre de ax a a1 (x siendo cualquier número del 1 al 5)… pero vamos aun mas arriba, hacia ai_migrate_a4_a1
;;stt
(script static void area_Two_test
(if (= test_ais 1)
(begin
(ai_migrate_a1_a2)
)
(if (= test_ais 3)
(begin
(ai_migrate_a3_a2)
)
(if (= test_ais 4)
(begin
(ai_migrate_a4_a2)
)
(if (= test_ais 5)
(ai_migrate_a5_a2)
)
)
)
)
) ;;end
;;stt
(script static void area_Three_test
(if (= test_ais 5)
(begin
(ai_migrate_a5_a3)
)
(if (= test_ais 4)
(begin
(ai_migrate_a4_a3)
)
(if (= test_ais 2)
(begin
(ai_migrate_a2_a3)
)
(if (= test_ais 1)
(begin
(ai_migrate_a1_a3)
)
)
)
)
)
) ;;end
;;stt
(script static void area_Four_test
(if (= test_ais 5)
(begin
(ai_migrate_a5_a4)
)
(if (= test_ais 3)
(begin
(ai_migrate_a3_a4)
)
(if (= test_ais 2)
(begin
(ai_migrate_a2_a4)
)
(if (= test_ais 1)
(begin
(ai_migrate_a1_a4)
)
)
)
)
)
;; (ai_command_list Alliez/Allies_5 Ai_go_4)
;; (ai_migrate Alliez/Allies_5 Alliez/Allies_4)
(set alliez_r_at5 1)
(set alliez_r_at4 0)
(ai_command_list Alliez/Allies_3 Ai_go_4)
(ai_migrate Alliez/Allies_3 Alliez/Allies_4)
(set alliez_r_at3 1)
(set alliez_r_at4 0)
) ;;end
;;end
;;stt
Muy bien, has brincado todo el camino hacia aquí – Vamos a ver lo que pasa si el jugador quiere que algo “return” (regrese).
(script static void follow_s
(if (= has_been_a1 1)
has_been_a2 es una localizacion de identificacion de algo... puedes adivinar?
(area_One_test)
Brinca al area_One_test para que veas lo que esta pasando...
(if (= has_been_a2 1)
(area_Two_test)
(if (= has_been_a3 1)
(area_Three_test)
(if (= has_been_a4 1)
(area_Four_test)
)
)
)
)
) ;;end
;;just because
;;stt Statics for advance_s
;;stt
;;end
(script static void advance_s
(if (= test_ais 1)
(ai_migrate_a1_a2)
(if (= test_ais 2)
(ai_migrate_a2_a3)
(if (= test_ais 3)
(ai_migrate_a3_a4)
(if (= test_ais 4)
(ai_migrate_a4_a5)
)
)
)
)
(set advanceb 0)
) ;;end
;;end
;;Statics for retreat_s
;;stt
;;retreat a1
;;stt
(script static void retreat_1
(if (= test_ais 2)
(ai_migrate_a2_a1)
(if (= test_ais 3)
(ai_migrate_a3_a2)
(if (= test_ais 4)
(ai_migrate_a4_a3)
(if (= test_ais 5)
(ai_migrate_a5_a4)
)
)
)
)
) ;;end
;;end
(script static void retreat_s
(retreat_1)
(set retreatb 0)
) ;;Statics for flank_s
;;stt
;;(script static void flank_1
;;)
;;fin
(script static void flank_s
(set flankb 0) )
;;fin
;;esta completado al menos que algo falte.
;;stt
(script static void set_has_beens
(if (= part_1 1)
(if (and (volume_test_objects area_1 (players)) (= has_been_a1 0))
(begin
(set has_been_a2 0)
(set has_been_a1 1) ;;entonces
)
(if (and (volume_test_objects area_2 (players)) (= has_been_a2 0))
(begin
(set has_been_a1 0)
(set has_been_a3 0)
(set has_been_a2 1) ;;entonces
)
(if (and (volume_test_objects area_3 (players)) (= has_been_a3 0))
(begin
(set has_been_a2 0)
(set has_been_a4 0)
(set has_been_a3 1) ;;then
)
(if (and (volume_test_objects area_4 (players)) (= has_been_a4 0))
(begin
(set has_been_a5 0)
(set has_been_a4 0)
(set has_been_a3 1) ;;entonces
)
)
)
)
)
;;si hay parte 2, poner aqui
)
)

Echa un vistazo – al parecer el aumento de este script es probar donde está el jugador… Una vez más, pero esta es un área donde fácilmente puede ser simplificada creando un id(identificación) único usando un corto o largo…. Está bien vamos hacia el contenedor otra vez!
;;end
;;stt ai_call_cmd, aqui es donde deverias de añadir voces de personajes de otros juegos lol

Aquí es donde está la carne del script, sin importar lo demás, aquí es donde logramos el propósito del scripter original (yo, Dwood) lo ha diseñado.
(script static void ai_call_cmd
(if (= cmd_mode true)
(if (= stayb true)
(begin
(stay_s)
)
(if (= advanceb true)
(begin
(advance_s)
)
(if (= retreatb true)
(begin
(retreat_s)
)
;;(if (= flankb true)
;; (begin
;; (flank_s)
;; )
;;)
)
)
)
(if (= air_modes 1)
(begin
(show_hud_help_text 1)
(hud_set_help_text air); does nothing
(sleep sleep_ninety)
(show_hud_help_text 0)
))
) ;;end
El propósito de este script es hacerlo cosa que el jugador pueda, sin interrumpir el del juego, comandar el ai, y tener una experiencia- escuadrón…
El modo de aire es un secreto que no deseo decir aun (va a ser revelado en otro momento y lo más probable en otro tutorial), va a coger el mismo ( o similar) concepto que los ai en los escuadrones, pero de una manera mucho más interesante.
En conclusión espero que este tutorial haya sido de uso, y de que puedas usar estos de ejemplos una manera que te deje crear buenos scripts que no solo van a seguir moviendo la comunidad de Halo, pero incrementar los estándares de los mapas y su creación. Gracias por leer!

;stt
(script static void test_has_beens
(if (and (= has_been_a1 1) (= has_been_a2 1))
(begin
(sleep sleep_longer)
(if (and (= has_been_a1 1) (= has_been_a3 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong1and2)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
)
)
(if (and (= has_been_a1 1) (= has_been_a3 1))
(begin
(sleep sleep_longer)
(if (and (= has_been_a1 1) (= has_been_a3 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong1and3)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
)
)
(if (and (= has_been_a1 1) (= has_been_a4 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong1and4)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a1 1) (= has_been_a5 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong1and5)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a2 1) (= has_been_a3 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong2and3)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a2 1) (= has_been_a4 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong2and4)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a2 1) (= has_been_a5 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong2and5)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a3 1) (= has_been_a4 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong3and4)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a3 1) (= has_been_a5 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong3and5)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
(if (and (= has_been_a4 1) (= has_been_a5 1))
(begin
(show_hud_help_text 1)
(hud_set_help_text wrong4and5)
(sleep sleep_ninety)
(show_hud_help_text 0)
)
)
)
Wait a second... the script is doing the same thing over and over.... it's testing between the two
variables, because they're never the same! (side note: that's not necessary if i'd had used a short
to create unique ids as they would never be the same no matter what because there's only 1 value
the short can be at any given time.
Now jump to the last continuous script called container.
;;end
;;misc. static scripts
(script static unit player_0
(unit (list_get (players) 0))
)
You've seen this before.... :O
;;STARTUP
;;stt
(script startup blah
(ai_allegiance player human)
) ;;end
Look at how long and complicated this script is! But wait! There's only 3 continuous threads! WHAT
THA.... I DON'T EVEN.
Dude, calm down let's break down the first continuous script line by line.
;;stt
(script continuous flashlight_check
The first thing to look at while evaluating scripts is to look at the names, and see if they are
descriptive, telling you what they do. flashlight_check – That descriptive enough for you?
(if (= (unit_get_current_flashlight_state (player_0)) 1)
If the player's flashlight is on
(if (= safe_to_go 1)
And it's safe to start
(begin
(show_hud_help_text 1)
(hud_set_help_text stay)
Tells player that something will stay if he doesn't turn on flashlight again
(sleep sleep_shorty)
Sleep for the amount of time designated
(unit_set_desired_flashlight_state (player_0) false)
Set flashlight off and then if the player turned it back on
(sleep sleep_longer)
(if (= (unit_get_current_flashlight_state (player_0)) 1)
If the player sets flashlight back on...
(begin
(hud_set_help_text follow)
Something will follow
;; (turn on hud messages)
(sleep sleep_shorty)
(unit_set_desired_flashlight_state (player_0) false)
(sleep sleep_longer)
(if (= (unit_get_current_flashlight_state (player_0)) 1)
(begin
(hud_set_help_text advance)
Something will advance
(sleep sleep_shorty)
(unit_set_desired_flashlight_state (player_0) false)
(sleep sleep_longer)
(if (= (unit_get_current_flashlight_state (player_0)) 1)
(begin
(hud_set_help_text retreat)
Something will retreat? Or is it telling the player what he
is going to do?
(sleep sleep_shorty)
(unit_set_desired_flashlight_state (player_0) false)
(sleep sleep_longer)
(if (= (unit_get_current_flashlight_state (player_0)) 1)
(begin
(hud_set_help_text flank)
Something will flank
(sleep sleep_shorty)
(unit_set_desired_flashlight_state (player_0) false)
(sleep sleep_longer)
(if (not (unit_get_current_flashlight_state (player_0)))
(begin
;;(set flankb 1) ;;call flank
(set followb 0)
Looks like nothing happens yet! The script is
unfinished here!
)
)
)
(begin
(set retreatb 1) ;;call retreat
It sets retreat to 1... but doesn't call a script???
(set followb 0)
Perhaps if the player wants the ai to follow him
they don't know when to not follow him?
)
)
)
(begin
(set advanceb 1)
(set followb 0)
)
)
)
(begin (set followb 1))
)
)
(begin
(set stayb 1) ;;if flashlight off set true
(set followb 0)
)
)
)
(begin
(hud_set_help_text unsafe)
What is unsafe? Something inside the game? Or is there something in the
script preventing the player from being able to call any commands?
(sleep sleep_longer)
(hud_set_help_text return)
Return? What on earth could that mean?
(sleep sleep_longer)
(if (= (unit_get_current_flashlight_state (player_0)) 1)
Okay so does that mean it's prompting for a response?
(begin
(hud_set_help_text returning)
Apparently it is?
(follow_s)Jump up to the void script follow_s to stay on track.
(sleep sleep_longer)
)
)
)
)
)
) ;;end
;;stt debug
(script continuous debug
(if (= debug 1)
(begin
(test_has_beens)
)
)
) ;;end
This script file is still in development and needs to be sure everything is in working order, thus a
debug script was designed. Let's move up to test_has_beens now. (the find function works
wonderfully)
The last, and certainly, most definitely not least script is called corntainer let's take a look at it.
(script continuous container
(set_has_beens)
Jump to “set_has_beens”
(if (= followb 1)
(begin
(follow_s)
(sleep sleep_ninety)
)
(begin
(ai_call_cmd)
Jump to this script
)
)
)


Mira todo eso!. Que mucho has aprendido verdad? Muchas de las veces usar el principio (No estoy siguiendo mis propios consejos! :Santo Dios: pero si te das cuenta estoy usando begin{principio} en los statements {declaraciones} significando que no sé si voy a estar añadiendo nada a ello( si no usas begins(principios) a las declaraciones, eso daña todo y da resultados de poca calidad, para ponerlo más corto!
Recuerda si solo necesitas hacer una cosa o llamar un script si solo usas eso. Si necesitas hacer 2 cosas dentro de la declaración usa begin(principio)! (Para eso fue hecho la declaración).
Gracias por leer, espero que hayas aprendido algo de esto.
Si quieres ver los scripts funcionando:
http://www.xfire.com/video/1beb6e/
http://www.xfire.com/video/1bebaa/
Edited by PRPatxi on Dec 5, 2010 at 06:57 AM


PRPatxi
Joined: Oct 30, 2010

Dennis, free me from this suffering


Posted: Dec 5, 2010 07:07 AM    Msg. 2 of 6       
Thanks assasinchief106, took me like 2 hours but it's here XD. And as always an accurate translation :P


sargejohnson
Joined: Apr 20, 2009

Shall we play a game?


Posted: Dec 5, 2010 09:11 AM    Msg. 3 of 6       
great work as usual paxti.

a suggestion: don't mind, use the code box for scripts next time, and you may want to format the scripts a little, so they aren't too messy.

example of code box:

type your code here.


Dennis

Joined: Jan 27, 2005

"We are made of starstuff.” ― Carl Sagan


Posted: Dec 5, 2010 12:48 PM    Msg. 4 of 6       
Tutorials posted in the forum have the life span of a fruit fly and are seen by less than 100 people at the very, very best. Format them for uploading so they can be placed in the archive where over 60,000 people a week visit.


PRPatxi
Joined: Oct 30, 2010

Dennis, free me from this suffering


Posted: Dec 5, 2010 05:16 PM    Msg. 5 of 6       
Quote: --- Original message by: Dennis
Tutorials posted in the forum have the life span of a fruit fly and are seen by less than 100 people at the very, very best. Format them for uploading so they can be placed in the archive where over 60,000 people a week visit.


Sure I'l do that! Maybe on January I'l have them ready for upload.
Is word okay, or they have to be PDF?

Quote: --- Original message by: sargejohnson
great work as usual paxti.

a suggestion: don't mind, use the code box for scripts next time, and you may want to format the scripts a little, so they aren't too messy.

example of code box:

type your code here.


Suggestion taken, next tutorial will have it!
Edited by PRPatxi on Dec 5, 2010 at 05:18 PM
Edited by PRPatxi on Dec 5, 2010 at 05:19 PM


Dennis

Joined: Jan 27, 2005

"We are made of starstuff.” ― Carl Sagan


Posted: Dec 5, 2010 07:10 PM    Msg. 6 of 6       
Quote: --- Original message by: PRPatxi
Is word okay, or they have to be PDF?
Word is fine. I'll convert them to PDF as well.

 

 
Previous Older Thread    Next newer Thread







Time: Sun May 24, 2020 10:23 PM 188 ms.
A Halo Maps Website