-
| .
|
Contadino
- Group
- Member
- Posts
- 18
- Reputation
- +1
- Status
- Offline
|
|
Ciao a tutti!!
Volevo creare una piccolissima mod ma ho qualche difficoltà, per questo ho bisogno di porvi qualche domanda. Premetto che ho iniziato da qualche giorno a spulciare nei codici di Imperivm quindi siate clementi
Allora vi chiedo se: - esiste un modo per verificare quanti attacchi ha sferrato una certa unità, per cui dopo un certo valore fa partire uno script?
- come si crea uno script che si avvia solo per una certa unità? Per esempio ogni minuto, ogni highlander guadagna 1 di difesa...
Vi ringrazio per il vostro aiuto e mi scuso se le domande sono per voi banali!
|
|
| .
|
-
| .
|
Ricky
- Group
- Eroi
- Posts
- 4,930
- Reputation
- +197
- Location
- Tourin (Italy)
- Status
- Anonymous
|
|
Ciao!
Visto che mi sembra di aver capito che tu abbia abbastanza competenze in programmazione, non scriverò risposte estremamente dettagliate ma rapide (salvo richiesta esplicita per date cose), così da favorire un migliore velocità nella discussione su questo topic.
Partiamo dal presupposto che su imperivm non è possibile programmare qualunque cosa (soprattutto a livello di modding) perché non si ha a disposizione un vero linguaggio di programmazione.
1) non esiste alcun metodo a riguardo, per farlo bisognerebbe provare a ragionare a vedere cosa si riesce a tirare fuori degli script già esistenti. Ammetto però di non aver ben capito cosa intendi per attacchi sferrati 2) In una classe puoi definire i method e i behavior script. Questi ultimi sono appunto eseguiti finché l'unità è viva (ma possono essere anche per le strutture). Infatti in genere si ha un while(1) e poi istruzioni fondamentali come IsValid() e IsAlive() per interrompere. Nel tuo caso dovresti quindi usare i behavior script. Ti dico subito che non esiste un metodo per settare la difesa. Potresti provare a usare
CODE Unit::AddBonus(int, int, int, int, int) I parametri rappresentano appunto l'attacco, la difesa e non ricordo cos'altro. Ma basta fare delle prove sull'editor e vedere ogni singolo parametro cosa aumenta
Per ogni dubbio, chiedi pure!
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 18
- Reputation
- +1
- Status
- Offline
|
|
Grazie della tua risposta
Con la prima domanda intendevo se esistesse una qualche funzione che "verifichi" quando un'unità sta combattendo con un'altra, e da questa creare un contatore che tenga conto di quanti attacchi ha recato all'altra unità. Per esempio questo povero highlander trova un elefante, si avvicina, gli dà una spadata e il contatore va a 1, poi un'altra spadata e va a 2 etc... Anche a me sembrava qualcosa di complicato e ne ero scettico. Si potrebbe lavorare sulla salute (o anche l'energia per alcune unità) ma credo diventi più complicato ancora.
Quindi mi focalizzo sulla seconda domanda. In particolare, questi behavior sembrano definiti per tutte le unità del gioco di classi melee e (short)ranged. Quindi non riesco a capire come definire un behavior per un solo class id. Per esempio, restando sull'esempio dell'aumento della difesa di un highlander (sempre se possibile), come faccio a scrivere qualcosa come:
se l'unità è un highlander allora "aumenta difesa"
E' proprio la verifica di un certo tipo di unità che non riesco a definire!
|
|
| .
|
-
| .
|
Ricky
- Group
- Eroi
- Posts
- 4,930
- Reputation
- +197
- Location
- Tourin (Italy)
- Status
- Anonymous
|
|
modifica così la classe
CODE <class id="BHighlander" cpp_class="CVXUnit" parent="Melee" entity="units/BHighlander/BHighlander.ent.xml">
<properties race="Britain"/> <properties maxhealth="500"/> <properties damage="50" armor_slash="6" armor_pierce="6"/> <properties speed="80"/> <properties unit_specials="Deflection"/>
<properties icon="gameres/icons/BHighlander.bmp"/> <properties display_name="Highlander" display_name_plural="Highlanders"/> <properties help="contents/units/BHighlander"/> <properties edittree_pos="Units/Britain/Highlander"/>
<behavior script="data/subai/highlander_increase_defence.vs"/> <sounds command="data/sound entities/VoiceBHighlander.xml"/> </class> Ho aggiunto solo la riga <behavior script="data/subai/highlander_increase_defence.vs"/>
Nel file highlander_increase_defence.vs prova a scrivere qualcosa del tipo:
CODE // void, Obj This
Unit this; this = This.AsUnit(); int ONE_MINUTE = 1000 * 60;
if(.IsValid() == false) { return; } if(.class() != "BHighlander") { //e' una verifica opzionale che puoi anche non mettere. return; }
while(true) { Sleep(ONE_MINUTE); if(.IsAlive() == false) { break; } u.AddBonus(0, 1, 0, 0, 0); //Non ricordo l'ordine dei parametri (e forse la funzione funziona male). }
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 18
- Reputation
- +1
- Status
- Offline
|
|
Grazie della risposta velocissima!
Ora ci provo subito, avevo visto dalla Greek Mod l'aggiunta del comando ad un'unità ma non sapevo si potesse fare anche così.
Sei stato molto d'aiuto, grazie mille!
|
|
| .
|
-
| .
|
Ricky
- Group
- Eroi
- Posts
- 4,930
- Reputation
- +197
- Location
- Tourin (Italy)
- Status
- Anonymous
|
|
Fammi sapere! Riguardo al primo problema prova a guardare UNIT_ENGAGE (mi pare si chiami così)
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 18
- Reputation
- +1
- Status
- Offline
|
|
Purtroppo non succede nulla
Ho provato anche con un'altra unità o a sostituire la AddBonus con la SetLevel e SetMaxHealth ma nulla!
|
|
| .
|
-
| .
|
Ricky
- Group
- Eroi
- Posts
- 4,930
- Reputation
- +197
- Location
- Tourin (Italy)
- Status
- Anonymous
|
|
Lo script non compila. Scrivi
CODE // void, Obj This
Unit this; int ONE_MINUTE; this = This.AsUnit(); ONE_MINUTE = 1000 * 60;
if(.IsValid() == false) { return; } if(.class() != "BHighlander") { //e' una verifica opzionale che puoi anche non mettere. return; }
while(true) { Sleep(ONE_MINUTE); if(.IsAlive() == false) { break; } .AddBonus(0, 1, 0, 0, 0); //Non ricordo l'ordine dei parametri (e forse la funzione funziona male). } Per verificare la compilazione, basta copiarla in una sequenza dell'editor e al posto di
scrivere
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 18
- Reputation
- +1
- Status
- Offline
|
|
Ok ci ho riprovato e ho notato che funziona!
Non so se nella classe il behavior deve avere la precedenza sui sounds ma prima non ci avevo fatto caso, ma il secondo codice funziona perfettamente!
|
|
| .
|
-
| .
|
Guerriero
- Group
- Eroi
- Posts
- 1,673
- Reputation
- +193
- Location
- Giza
- Status
- Anonymous
|
|
Se il problema specifico è stato risolto, chiuderei, a meno che tu abbia altri dubbi a riguardo. Se hai quesiti su altre cose, non esitare ad aprire altri topic. Fammi sapere.
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 18
- Reputation
- +1
- Status
- Offline
|
|
Ora è tutto chiaro, problema risoltissimo! Devo giocare solo un po' sulle funzioni ora.
Chiudi pure!
|
|
| .
|
-
| .
|
Ricky
- Group
- Eroi
- Posts
- 4,930
- Reputation
- +197
- Location
- Tourin (Italy)
- Status
- Anonymous
|
|
Ti lascio con un piccolo consiglio: per scrivere e compilare il codice, dopo aver creato il file in subai, apri il gioco, avvia l'editor (o una qualsiasi partita), apri la console e digita
Per dubbi, chiarimenti o supporto puoi pubblicare senza problemi e senza limiti altri post come questo! Chiudo!
|
|
| .
|
11 replies since 21/4/2020, 18:35 109 views
.