Autore Topic: [GUIDE] Editor A3 Lezione 2 - Struttura cartella, programmi e file principali  (Letto 2724 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

DuM3D0

  • Limbo
  • Nuovo arrivato
  • *
  • Post: 0
  • Cogito Ergo Doom
Salve a tutti, mi rimetto a fare qualche guida per dare una mano a chi inizia. Come sempre queste mie informazioni sono il mio metodo, ci sono molti altri metodi per fare le solite cose che funzionano benissimo e che magari sono completamente diversi, lo scopo di queste guide è cercare di far superare lo scoglio iniziale dell'editing perchè l'inizio o molto difficile.. tranquilli dopo è anche peggio  :asd:

Nel video della lezione 1 avevo descritto le basi di utilizzo dell'editor, di come lavoro e mi preparo e tengo della cartelle aperte per fare delle modifiche direttamente sui vari file che compongono la missione.

ATTENZIONE: Ho il gioco in inglese, quindi userò i termini inglesi dei tasti presenti dell'editor, lo uso in inglese perchè nella versione tradotta spesso non si vedono tutte la scritta sui tasti oppure son tradotti male e non si capisce bene la funzione.

Programmi Utili:
Io uso 2 programmi

PBO Manager è un programma per Arma2 ma che funziona perfettamente anche per ArmA3, in pratica è come il 7zip. Serve per comprimere la cartella missione in un file .pbo che può essere letto dal gioco come missione oppure serve anche per decomprimere una missione per vedere ad esempio come è stata fatta.
In pratica una volta completata la missione, se vogliamo provarla dobbiamo creare il .pbo cliccando col tasto destro sulla cartella missione e poi dal menù contestuale selezionare "pbo manager" e poi selezionare "pack into nomemissione.pbo. fatto questo possiamo mettere il file .pbo appena creato nella cartella mpmission di arma oppure nella relativa cartella del server dedicato e farla partire da dentro il gioco.

Notepad++ con la sintassi per ArmA. Questo programma più il plugin per arma permette di visualizzare facilmente il codice, che verrà colorato in maniera diversa per una lettura più semplice ed immediata del codice. Ecco un esempio, a sinistra il notepad++ a destra un altro editor di testo:

notepad by Dumedo, on Flickr

Cartella missione:

la cartella missione io la faccio sempre creare dall'editor, cioè apro l'editor piazzo la mia prima unità la rendo "giocabile" e vado su salva con nome, lascio salva come missione utente e gli do un nome.
Il nome non è importante all'inizio, tanto si può cambiare il seguito, l'importante è capire 2 cose:
- primo, non usare nomi troppo lunghi o spazi, ad esempio "[TS]Co10 attacco alla base" dovrà essere scritto "[TS]Co10_attacco_alla_base" altrimenti lui vi salverà la missione così "[TS]Co10%20attacco%20alla%20base" e diventa un bordello.
- secondo, il nome della cartella (che sarà poi il nome del .pbo) non è il nome della missione. Il nome della missione, che poi vedrete quando la caricate nella scelta misioni del server lo scrivete nel menù "Advanced Intel" qui vi potete sfogare con spazi e lunghezza del testo.

Nella cartella missione ci sono 3 file principali:
- mission.sqm
- description.ext
- init.sqf

mission.sqm
Il mission.sqm contiene tutto quello che piazzate dentro l'editor, i trigger le unità il loro comportamento gli oggetti etc. in genere non ci si mette dentro mano eccetto casi eccezionali.
Il file viene creato automaticamente dall'editor quando salvate la prima volta e mano a mano che salvate verrà aggiornato ed aumenterà di dimensioni. E' l'unico file veramente necessario per far partire una missione, il resto è roba importante ma in più.

description.ext
Il file description.ext permette di definire alcuni parametri della missione come il tipo di missione (coop, DM, TDM,CTF), il numero minimo e massimo di giocatori l'autore della missione, il tipo di respawn, i parametri della missione da far scegliere ai giocatori (se è previsto) la frase alla fine della missione o differenti fine missione (successo o fallimento ad esempio) ed infine in alcuni casi fa partire degli script.
Il mio, per le coop è sempre uguale, magari cambio qualcosa da missione a missione ma è raro. Eccolo:

description.ext
Spoiler
Codice: [Seleziona]
class Header
{
  gameType = Coop; //tipo missione
  minPlayers = 1; //min giocatori per far patire la missione (credo)
  maxPlayers = 20;
};

showCompass   = 1; //permette di usare i seguenti oggetti nella missione
showGPS       = 1;
showMap       = 1;
showWatch     = 1;
debriefing    = 1;
disabledAI    = 1; //disabilita AI lato giocatori

overviewText = "http://www.tornadosquad.it/"; //info durante il caricamento
overviewTextLocked = "overviewTextLocked";  //Boh?
overviewPicture = "sqd_logo.paa";  //Logo durante il caricamento personalizzato
author = "[TS]Sgt.Maj.DuM3D0";  //una persona che stimo molto

//Respawn
Respawn = 3; //il tipo di respawn (sulla wiki bohemia c'è descritto quali sono gli altri)
RespawnDelay = 3; //il tempo di respawn (quanto passa da quando cliccate respawn a quando poi apparite di nuovo)

//inclusione dello script TAW che permette settaggio visuale e quantità di vegetazione ai giocatori
#include "taw_vd\dialog.hpp"
class CfgFunctions
{
#include "taw_vd\CfgFunctions.hpp"
};

//finale 1
class CfgDebriefing

class End1
{
title = "Fine Missione";
subtitle = "";
description = "Missione Compiuta";
pictureBackground = "sqd_logo.paa"; //logo di sfondo personalizzato
pictureColor[] = {};
};
};

init.sqf
Il file init.sqm è importantissimo, in genere si usa per eseguire del codice che andrà ad influenzare tutti i giocatori, o eseguire dei file con del codice esterno (script esterni) ma sempre nella cartella della missione, a volte cambia leggermente a seconda della necessità. Un esempio di codice sempre presente è il settaggio automatico dei canali di tutte le radio dei giocatori con questo:

Codice: [Seleziona]
/**
* Task Force Arma 3 radio settings
*/
#include "\task_force_radio\functions\common.sqf"; //questo se lo va a cercare dentro il pbo del mod, non dovete metterlo nella vostra cartella missione
if ((isServer) or (isDedicated)) then {
tf_no_auto_long_range_radio = true;// questo settato su true non assegna automaticamente la radio lungo raggio ai capi squadra
publicVariable "tf_no_auto_long_range_radio";
tf_same_sw_frequencies_for_side = true;// radio corto raggio solita frequenza
publicVariable "tf_same_sw_frequencies_for_side";
tf_same_lr_frequencies_for_side = true;// radio lungo raggio solita frequenza
publicVariable "tf_same_lr_frequencies_for_side";
_settingsSwWest = false call TFAR_fnc_generateSwSettings;
_settingsSwWest set [2, ["311","312","313","314","315","316","317","318"]];// le 8 frequenze per la corto raggio
tf_freq_west = _settingsSwWest;
_settingsLrWest = false call TFAR_fnc_generateLrSettings;
_settingsLrWest set [2, ["50","55","60","65","70","75","80","85","90"]];//e le 9 per la lungo raggio
tf_freq_west_lr = _settingsLrWest;
};

Ed ecco il codice completo:

init.sqf
Spoiler
Codice: [Seleziona]
//to prevent MP / JIP issues
//appunto evita problemi in multiplayer, da usare SEMPRE!!
if ((!isServer) && (player != player)) then
{
  waitUntil {player == player};
};

// Intro
//esegue lo script contenuto nel file intro.sqf da me creato
//e fa partire una piccola intro all'inizio un semplice fade in con delle scritte
//per evitare di vedere le animazioni del cambio di loadout dei giocatori o per altri motivi
execVM "scripts\trigger\intro.sqf";

/**
* Task Force Arma 3 radio settings
*/
//settaggi frequenze radio uniformi per tutti
#include "\task_force_radio\functions\common.sqf";
if ((isServer) or (isDedicated)) then {
tf_no_auto_long_range_radio = true;
publicVariable "tf_no_auto_long_range_radio";
tf_same_sw_frequencies_for_side = true;
publicVariable "tf_same_sw_frequencies_for_side";
tf_same_lr_frequencies_for_side = true;
publicVariable "tf_same_lr_frequencies_for_side";
_settingsSwWest = false call TFAR_fnc_generateSwSettings;
_settingsSwWest set [2, ["311","312","313","314","315","316","317","318"]];
tf_freq_west = _settingsSwWest;
_settingsLrWest = false call TFAR_fnc_generateLrSettings;
_settingsLrWest set [2, ["50","55","60","65","70","75","80","85","90"]];
tf_freq_west_lr = _settingsLrWest;
};

// Loadouts
//esegue il codice per l'equipaggiamento dei giocatori da me
//adattato ed ottimizzato
execVM "scripts\equip\client.sqf";

//shk_FHQ TaskTracker
//script per la gestione dei briefing e degli obiettivi missione
call compile preprocessFileLineNumbers "scripts\fhqtt2.sqf";
call compile preprocessFileLineNumbers "scripts\briefing.sqf";

//Light Vehicle Respawn
//gestisce il respawn dei mezzi
call compile preProcessFile "scripts\vehInitFunctions.sqf";

//Abilita il Dynamic Player markers script
//serve per visualizzare i giocatori in mappa
0 = [] execVM "scripts\player_markers.sqf";

//Hidemarker
//rende trasparente il marker degli eventuali obiettivi che all'inizio sono nascosti
//il nome tra virgolette è il nome del marker
"obiettivo3" setMarkerAlpha 0;
"obiettivo4" setMarkerAlpha 0;

Struttura della Cartella missione:

Come forse avrete già visto dagli esempi io gli script esterni li metto in una cartella script e a volte in altre sottocartelle per mio ordine mentale, tutto potrebbe tranquillamente funzionare nella solita cartella ma quando avete 334 file (come la missione Burgundi's Realm Atto II°) conviene dividere tutto in cartelle altrimenti non ci capite più nulla.

Ho cercato di essere il più chiaro possibile, se volete fare commenti o volete delucidazioni postate pure, vi chiedo solo di restare in topic, tanto spiegerò altre cose più avanti.

 :rulez: :teach:
« Ultima modifica: 19 Settembre 2016, 22:54:24 da [TS]Epok »

[TS]Epok

  • Tornado Squad
  • Utente storico
  • ****
  • Post: 1473
  • Fra le armi tacciono le leggi
Quindi per quanto riguarda il loadout dei giocatori non metti niente nei riquadri di inizializzazione degli uomini?
Se non sei uno di noi, sei uno di loro.

DuM3D0

  • Limbo
  • Nuovo arrivato
  • *
  • Post: 0
  • Cogito Ergo Doom
Esattamente, ai personaggi giocabili metto solo un nome che poi è identico al nome nel client.sqf al quale poi associo sempre in quel file un "fnc_xxx" relativo al loadout che voglio per quel giocatore.

Cmq farò prossimamente post esclusivamente su quello.

[TS]Epok

  • Tornado Squad
  • Utente storico
  • ****
  • Post: 1473
  • Fra le armi tacciono le leggi
Il mio problema è che in quel modo ad ogni respawn non ricarica il loadout assegnato all'inizio.
Ho quindi risolto inserendo nella finestra di inizializzazione di ogni omino la seguente riga:

this addEventHandler ["Respawn", {_this execVM "scripts\client.sqf"}];

Se non sei uno di noi, sei uno di loro.

DuM3D0

  • Limbo
  • Nuovo arrivato
  • *
  • Post: 0
  • Cogito Ergo Doom
Mah io mettevo sempre il save loadout in AGM e anche in ACE, quindi quando muori rinasci con quello con cui sei morto e con il solito quantitativo di munizioni etc, dipende che gameplay vuoi sviluppare.

Se te ogni volta semplicemente muori e fai respawn come se tu fossi "nuovo" non so se il "mio" sistema va bene, non ho mai provato.