-
.
Salve ragazzi sono resuscitato dal mondo dei morti... Oltre a BRITANNIA la nuona avventura che ho messo a disposizione, ce n'è un'altra che ho in cantiere da parecchio tempo. Veniamo al dunque, mi servirebbero 2 principali script per chi riesce a realizzarmeli, per poter finalmente mettere la mappa disponibile
SCRIPT NUMERO 1:
La mappa è composta da 8 giocatori, all'inizio vorrei che il giocatore potesse scegliere quali popoli utilizzare, ovvero, potesse scegliere la sua fazione per poi cominciare la partita.
SCRIPT NUMERO 2: (IL PIU' A MIO AVVISO COMPLESSO)
Ogni circa 30/35 minuti dovrebbero spawnare delle "invasioni" in 2 principali punti della mappa.
Il problema è che tali invasioni dovranno avere dei comportamenti ben precisi, Mi spiego:
- Devono attaccare qualunque giocatore indifferentemente dalla fazione, puntando a conquistare tutti gli insediamenti e fortezze delle mappa ( Se ci riescono ). A questo punto di aprono 2 scenari:
1) Se le invasioni conquistano una fortezza, poi non devono diventare "passive", anzi devono cominciare a giocare come la IA precedente ( ed in quel caso il countdown del nuovo respawn delle invasioni cessa, ovvero se qualche fortezza è sotto il controllo dell'invasione non vi saranno nuove invasioni fin quando quella fortezza non è di diverso giocatore)
2) Se tutte le forze delle invasioni vengono neutralizzate parte un nuovo countdown e dopo i 30/35 minuti successivi, appariranno le nuove invasioni.
Per fare un esempio in "imperium la guerra gallica" c'è una missione dove larax conquista degli insediamenti poi si pente di aver aiutato cesare ed allora arrivano tutte legioni romane che cominciano ad arare tutta la mappa, e se le uccidi ne compaiono delle altre etc etc.. Una cosa di questo genere ma ad intervalli e con comportamenti ben precisi come scritto sopra...
non so se tale script è possibile, ma se riuscite a realizzarlo metterò subito disponibile questa nuova mappa
Un'altra cosa molto importante da sapere!!
Una cosa che non mi spiego è come rendere la IA difficile, cioè per far si che ogni giocatore possa scegliere la sua fazione devo mettere tutte le fazioni come giocabili da "Entrambi", creando poi una sequenza con IAStart(x,CHAOTIC,2); in maniera che i "non-giocatori" siano sotto il controllo del computer. Basta una sequenza con una stringa per ogni popolo, o devo usare qualche ciclo?
Edited by x[CLOUD]x - 4/8/2018, 14:06. -
.
Per quanto riguarda lo script numero 1, potresti procedere in questo modo: tutte le fortezze sono del giocatore 16 e, a seconda del popolo scelto, tramite una conversazione o qualsiasi altra cosa tu voglia mettere, la fortezza della nazione selezionata diventa del giocatore 1, mentre le altre diventano del giocatore 2, 3, 4 e così via. Dimmi cosa ne pensi. . -
.
Infame! Mi hai rubato l'idea! Io ti denuncio! . -
.CITAZIONEPer quanto riguarda lo script numero 1, potresti procedere in questo modo: tutte le fortezze sono del giocatore 16 e, a seconda del popolo scelto, tramite una conversazione o qualsiasi altra cosa tu voglia mettere, la fortezza della nazione selezionata diventa del giocatore 1, mentre le altre diventano del giocatore 2, 3, 4 e così via. Dimmi cosa ne pensi.
PERFETTO!! Naturalmente se io decido di mettere dei soldati a difesa dei fori, anche loro debbono diventare del suddetto giocatore ... ah e dovrebbe cambiare anche la diplomazia -.-
Edited by x[CLOUD]x - 6/8/2018, 00:01. -
.CITAZIONEPer quanto riguarda lo script numero 1, potresti procedere in questo modo: tutte le fortezze sono del giocatore 16 e, a seconda del popolo scelto, tramite una conversazione o qualsiasi altra cosa tu voglia mettere, la fortezza della nazione selezionata diventa del giocatore 1, mentre le altre diventano del giocatore 2, 3, 4 e così via. Dimmi cosa ne pensi.
PERFETTO!! Naturalmente se io decido di mettere dei soldati a difesa dei fori, anche loro debbono diventare del suddetto giocatore ... ah e dovrebbe cambiare anche la diplomazia -.-
Chiaramente lo script della scelta va implementato in una Conversazione e, a meno che tu non voglia usufruire della funzionalità di script di queste ultime, dovrai fare tante sequenze quanti i giocatori presenti e dovrai avviarle a seconda delle scelte che fa chi gioca.
Per il secondo script, quello delle IA dinamiche, ti dico che forse è un po'impossibile perché dovresti usare degli AIHelper ma quelli vanno solo in determinate direzioni per fare le solite cose (conquistare, difendere, difendere l'area...); un modo per implementare quello che vorresti fare forse c'è...
Potresti lavorare con tutti gli edifici della mappa e poi fare un sorteggio per vedere quale di essi potrebbe essere attaccato dalle invasioni. Dopodiché le truppe spawnano ed iniziano l'attacco verso quella destinazione/giocatore/fortezza.
Poi se riescono a conquistare una fortezza dovresti disattivare la sequenza di countdown e respawn ed avviare l'IA del giocatore virtuale che "rappresenta" le invasioni.
Spero di esserti stato utile.. 😊. -
.CITAZIONEPer quanto riguarda lo script numero 1, potresti procedere in questo modo: tutte le fortezze sono del giocatore 16 e, a seconda del popolo scelto, tramite una conversazione o qualsiasi altra cosa tu voglia mettere, la fortezza della nazione selezionata diventa del giocatore 1, mentre le altre diventano del giocatore 2, 3, 4 e così via. Dimmi cosa ne pensi.
PERFETTO!! Naturalmente se io decido di mettere dei soldati a difesa dei fori, anche loro debbono diventare del suddetto giocatore ... ah e dovrebbe cambiare anche la diplomazia -.-
Dunque ora ti rispondo a questo punto, poi, appena ho un po' di tempo libero penso alla seconda sequenza.
Per evitare di dover scrivere enormi blocchi di codice in ciascuna frase della conversazione, ti conviene utilizzare una variabile d'ambiente. Quindi, per farti un esempio pratico, dovresti formare una conversazione di questo tipo:SPOILER (clicca per visualizzare)[1]
Frase: "Con quale civiltà desideri giocare?"
Tipo di seguito: Scegli;
Seguiti: 2;3;4;5;6;7;8;9
[2]
Frase: Roma Repubblicana;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",0);
[3]
Frase: Roma Imperiale;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",1);
[4]
Frase: Gallia;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",2);
[5]
Frase: Cartagine;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",3);
[6]
Frase: Iberia;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",4);
[7]
Frase: Germania;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",5);
[8]
Frase: Britannia;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",6);
[9]
Frase: Egitto;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",7);
Dopodiché, ti occupi di scrivere la relativa sequenza (di cui non ho scritto tutti i vari cambi di giocatore delle fortezze/gruppi sia per mancanza di informazioni, sia perché tanto il procedimento è un copia-incolla continuo), che dovrà avere l'autoesecuzione attiva:CODICERunConv("SceltaNazione");
//ROMA REPUBBLICANA
if(EnvReadInt("Civiltas")==0){
NOMESTRUTTURA.SetPlayer(1);
NOMESTRUTTURA.SetPlayer(2);
NOMEGRUPPO.SetPlayer(1);
NOMEGRUPPO.SetPlayer(2);
DiplCeaseFire(1,2,true);
DiplCeaseFire(2,1,true);
}
//ROMA IMPERIALE
if(EnvReadInt("Civiltas")==1){
NOMESTRUTTURA.SetPlayer(1);
NOMESTRUTTURA.SetPlayer(2);
NOMEGRUPPO.SetPlayer(1);
NOMEGRUPPO.SetPlayer(2);
DiplCeaseFire(1,2,true);
DiplCeaseFire(2,1,true);
}
//Continua tu con il resto del codice, modificando di volta in volta i parametri quando necessario.. -
.PERFETTO!! Naturalmente se io decido di mettere dei soldati a difesa dei fori, anche loro debbono diventare del suddetto giocatore ... ah e dovrebbe cambiare anche la diplomazia -.-
Dunque ora ti rispondo a questo punto, poi, appena ho un po' di tempo libero penso alla seconda sequenza.
Per evitare di dover scrivere enormi blocchi di codice in ciascuna frase della conversazione, ti conviene utilizzare una variabile d'ambiente. Quindi, per farti un esempio pratico, dovresti formare una conversazione di questo tipo:SPOILER (clicca per visualizzare)[1]
Frase: "Con quale civiltà desideri giocare?"
Tipo di seguito: Scegli;
Seguiti: 2;3;4;5;6;7;8;9
[2]
Frase: Roma Repubblicana;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",0);
[3]
Frase: Roma Imperiale;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",1);
[4]
Frase: Gallia;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",2);
[5]
Frase: Cartagine;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",3);
[6]
Frase: Iberia;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",4);
[7]
Frase: Germania;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",5);
[8]
Frase: Britannia;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",6);
[9]
Frase: Egitto;
Tipo di seguito: Fine;
Azione dello script: EnvWriteInt("Civiltas",7);
Dopodiché, ti occupi di scrivere la relativa sequenza (di cui non ho scritto tutti i vari cambi di giocatore delle fortezze/gruppi sia per mancanza di informazioni, sia perché tanto il procedimento è un copia-incolla continuo), che dovrà avere l'autoesecuzione attiva:CODICERunConv("SceltaNazione");
//ROMA REPUBBLICANA
if(EnvReadInt("Civiltas")==0){
NOMESTRUTTURA.SetPlayer(1);
NOMESTRUTTURA.SetPlayer(2);
NOMEGRUPPO.SetPlayer(1);
NOMEGRUPPO.SetPlayer(2);
DiplCeaseFire(1,2,true);
DiplCeaseFire(2,1,true);
}
//ROMA IMPERIALE
if(EnvReadInt("Civiltas")==1){
NOMESTRUTTURA.SetPlayer(1);
NOMESTRUTTURA.SetPlayer(2);
NOMEGRUPPO.SetPlayer(1);
NOMEGRUPPO.SetPlayer(2);
DiplCeaseFire(1,2,true);
DiplCeaseFire(2,1,true);
}
//Continua tu con il resto del codice, modificando di volta in volta i parametri quando necessario.
In effetti avevo proprio io queste idee. Non a caso ho fatto tutte quelle unificazioni l'anno scorso.
Mancano però i bonus per fazione. Cosa decidiamo di mettere? O vogliamo fare senza bonus?. -
.
Grazie ragazzi ora manca solo lo script invasion ed è pronta il bello è che se lo script funziona ( se lo fa master molto probabile di si ) lo posso integrare anche in un'altra avventura cosi al posto di una ne posto 2 . -
.
Dopo un po' di tempo libero, ho scritto il codice relativo al punto 2. Poiché l'ho fatto in poco tempo, potrebbe darsi che ci siano alcuni errori di forma o di effettività. CODICEint thisPlayer, attackDelay;
thisPlayer=5; //Modifica tale valore a seconda del player a cui stai impostando la sequenza
attackDelay=1800000; //Modifica tale valore a tuo piacimento in base al ritardo tra un'ondata e l'altra
while(true){
int i,target;
target=rand(8)+1;
//Se il gruppo non esiste viene rigenerato
if(GRUPPOASSALTO.count==0){
SpawnGroup(GRUPPOASSALTO);
Sleep(1000);
}
//Se il gruppo conta più di un elemento vengono avviati gli assalti
else{
int randTarget;
ObjList EnemyBuildings;
EnemyBuildings=ClassPlayerObjs("Building",target).GetObjList();
while(EnemyBuildings.count>0 && GRUPPOASSALTO.count>0){
EnemyBuildings=ClassPlayerObjs("Building",target).GetObjList();
randTarget=rand(EnemyBuildings.count);
while(EnemyBuildings[randTarget].player!=thisPlayer && GRUPPOASSALTO.count>0){
if(!IsAIHelperRunning("Attacking")){
RunAIHelper("Attacking","siege","NOMEGRUPPO",EnemyBuildings[randTarget].name);
}
Sleep(1000);
}
StopAIHelper("Attacking");
Sleep(1000);
}
Sleep(1000);
}
Sleep(attackDelay);
}
Edited by TheMaster0017 - 11/8/2018, 22:00. -
.CITAZIONEint thisPlayer, attackDelay;
thisPlayer=5; //Modifica tale valore a seconda del player a cui stai impostando la sequenza
attackDelay=1800000; //Modifica tale valore a tuo piacimento in base al ritardo tra un'ondata e l'altra
while(true){
int i,target;
//Rimozione degli alleati e del giocatore attaccante dai possibili bersagli
for(i=0;i<8;i=i+1){
if(enemies[i+1]!=thisPlayer && DiplGetCeaseFire(thisPlayer,i+1)==false){
target=i+1;
}
Sleep(1);
}
//Se il gruppo non esiste viene rigenerato
if(GRUPPOASSALTO.count==0){
SpawnGroup(GRUPPOASSALTO);
}
//Se il gruppo conta più di un elemento vengono avviati gli assalti
else{
int randTarget;
ObjList EnemyBuildings;
EnemyBuildings=ClassPlayerObjs("Building",target).GetObjList();
while(EnemyBuildings.count>0 && GRUPPOASSALTO.count>0){
EnemyBuildings=ClassPlayerObjs("Building",target).GetObjList();
randTarget=rand(EnemyBuildings.count);
while(EnemyBuildings[randTarget].player!=thisPlayer && GRUPPOASSALTO.count>0){
if(!IsAIHelperRunning("Attacking")){
RunAIHelper("Attacking","siege","NOMEGRUPPO",EnemyBuildings[randTarget].name);
}
Sleep(1000);
}
StopAIHelper("Attacking");
Sleep(1000);
}
Sleep(1000);
}
Sleep(attackDelay);
}
Mi dice che non esiste alcuna funzione per "enemies" inoltre io a thisplayer ho messo 14 che è il giocatore che dovrà fare da ondata.. ma non succede nulla. -
.Mi dice che non esiste alcuna funzione per "enemies" inoltre io a thisplayer ho messo 14 che è il giocatore che dovrà fare da ondata.. ma non succede nulla
Non sapevo fosse il 14.
Perciò ho modificato il post precedente. Dimmi se c'è qualcosa che non funziona.. -
.
ok ora provo
ps sono in discord. -
.
Beh, alla fine come è andata? . -
.
niente non funziona, spawn il gruppo ma non attacca ne fa nulla... sto provando su di un'altra mappa per vedere come va . -
.niente non funziona, spawn il gruppo ma non attacca ne fa nulla... sto provando su di un'altra mappa per vedere come va
Domani ri-scompatto imperivm e provo la sequenza..