Jump to content
Rpg²S Forum

Thejuster

Utenti
  • Posts

    626
  • Joined

  • Last visited

Everything posted by Thejuster

  1. Piccola news, Aggiunto le condizioni climatiche come pioggia e neve. Dal video di bassa qualità non si nota, ma ci sono lampi che ogni tanto si fanno vedere.
  2. Al momento i progetti disponibili sono questi Le piattaforme supportate sono moltissime, ma serviranno dei test a lungo andare cosa che da solo sarà impossibile da verificare. Servirà del tempo, nel frattempo, mi dedico alla versione Desktop Multi-piattaforma. Unico problema, e che per ogni piattaforma diversa alcuni shader vanno adattati o addirittura riscritti. Per ora come detto mi concentro unicamente sulla versione windows che è quella maggiormente utilizzata dal 90% degli utenti.
  3. Purtroppo al momento non c'è una versione disponibile. Tempo fà avevo rilasciato una beta, ma si è rilevato un fallimento. Numerosi errori e crash del progetto. Che pian piano ho risolto e sistemato. Appena il programma sarà in grado di creare correttamente un mini game del tipo, Parlare correttamente con NPC, ostacoli sulla mappa, un numero considerevole di funzioni per gli eventi, rilascerò una prima versione stabile parziale e funzionale. Non servirà molto tempo.
  4. E' possibile scrivere propri plug-in. Compatibilità con altri plugin non è possibile, perché e comunque interpretato dal motore e richiede determinati fattori per funzionare. Esempio le API a cui fà riferimento il javascript al motore. Ecma 6 ma con alcune limitazioni Non è possibile usare: Generatori, Unicode, Moduli, Weakmap e Weakse, Promises e chiamate di coda. Esempio di script: Questo è lo script del TitleScreen, da qui puoi notare com'è strutturato e le sue funzionalità //#################################################### //# Default Scene_Title # //# Warning: # //# This class is vital. # //# You can Clear all content in this script # //# and make empty all function # //# But you cannot remove the file. # //# Mire depends on it. # //#--------------------------------------------------# //# By Mire Dev # //#################################################### //Include library #include "Bitmap.js" //Bitmap Class #include "Window_Base.js" //Window Class #include "Screen.js" //Screen Class #include "Scene_Manager.js" //Scene Manager #include "Audio.js" //System Audio #include "Keyboard.js" //Keyboard //Public Variables var selected_item = 0; //Selected item on window var item = 2; //Max Item on the list //Constructor function Scene_Title() { this.bitmap = new Bitmap(); this.window = new Window_Base(); this.screen = new screen(); this.scene = new Scene_Manager(); this.audio = new Audio(); this.keyboard = new Keyboard(); }; //Initialize the Scene Scene_Title.prototype.Initialize = function() { //Metodo Initialize var b = new Bitmap(); //Load Background Image b.Cache(0,"data\\GUI\\Title\\Mire.png"); //Load System Skin this.window.Cache("System01"); //Creating Window Selectable this.window.Add_SelectableItem(0,0,"New Game"); this.window.Add_SelectableItem(0,1,"Continue"); this.window.Add_SelectableItem(0,2,"Exit"); }; Scene_Title.prototype.Test = function() { //Draw Background this.bitmap.Draw(0,0,0); }; //Scene rendering Update Scene_Title.prototype.Update = function() { //Draw Background this.bitmap.Draw(0,0,0); //Setup variabile padding var wx = (this.screen.GetWidth() - 250) / 2; var wy = this.screen.GetHeight() / 2; var ww = 250 + (this.window.StandardPadding() * 2); var wh = 96 + (this.window.StandardPadding() * 2); //Draw Selectable Window this.window.Draw_SelectableWindow(wx,wy,ww,wh,0,selected_item); //On Key Down pressed if(this.keyboard.GetKey() == "down") { //Cursor Sound Effect this.audio.PlaySE("cursor"); //if Selected Item ID are same to full item ID if(selected_item == item) { selected_item = 0; //Back to First }else { selected_item++; //Increment ( Slide down ) } } //On Up Arrow Pressed if(this.keyboard.GetKey() == "up") { //Cursor Sound Effect this.audio.PlaySE("cursor"); //If Selected Item are same to 0 ID if(selected_item == 0) { selected_item = item; //Goto Last Item }else { selected_item--; //Decrement ( Slide Up ) } } //On Key Enter pressed Goto Game if(this.keyboard.GetKey() == "enter") { if(selected_item == 0) //Selected New Game { this.audio.PlaySE("accept"); this.scene.StartGame(); } if(selected_item == 1) //Continue { this.scene.Call("Prova"); } if(selected_item == 2) //Exit { //this.scene.Call("new"); } } }
  5. Si holy, sfrutta sia l'openGL, DirectX e WebGL. Come linguaggio di scripting ho optato per javascript proprio perché è multi piattaforma ed è molto facile apprendere il suo utilizzo. Volendo, si può riscrivere a proprio piacimento tutto il comportamento del motore. nel senso è stato progettato per RPG, ma mettendo mano al javascript si può fare qualsiasi cosa. Qualche post più sopra https://images-ext-1.discordapp.net/external/3WuII4Z-h0_n8H8HT6PdX2upDQeYHL5uo9cufUyw4nc/http/g.recordit.co/u103ixBwE1.gif viene proprio illustrata la conversione del mio shader delle luci, da PixelShader a Fragment Shader. C'era anche una build per android su google play, ma è stata rimossa perché ritenuta troppo scarsa di contenuti. In effetti veniva mostrato unicamente un livello di gioco ed il chara che si muoveva per la mappa.
  6. Ciao ragazzi e da tempo che non scrivo. Anche se l'età avanza, ed il tempo scarseggia non ci si ferma mai di rincorrere i propri sogni. Porto nuovità su mire. A breve sarà disponibile una TechDemo giocabile. Ho creato una pagina anche su Itch https://thejuster.itch.io/mire-engine Si spera magari li di avere un pò di visione ed una qulche collaborazione grafica. Al momento ho acquistato un pacchetto di risorse da utilizzare come Anteprima della TechDemo Proprio per venire in contro a spiacevoli inconveniente tali come "uso di materiale di altri tool" Nel frattempo ho realizzato un piccolo video dei progressi fatti fino ad ora. Build delle mappe triplicato ( velocità di compilazione) Nei vecchi video serviva qualche minuto per compilare una mappa con piu layer, adesso è quasi istantaneo. NPC e Nodi ora sono perfettamente funzionali, E molte altre modifiche e correzzioni. Ed altre funzioni come teleport, gestione delle variabili ecc. ecc. https://cdn.discordapp.com/attachments/278928749246939136/824677476290527253/bandicam_2021-03-25_17-17-57-169.mp4
  7. Certo ragazzi, anche io sono contrario e non ammetto l'utilizzo di una risorsa senza aver citato l'autore. Anche io realizzo diversi progetti openSource e sò come funziona. L'obiettivo del programma non è quello di evitare di creditare Cherry, anzi. ma di poterlo fare liberamente nei crediti e non quella di avere uno splash screen iniziale fastidioso. L'obiettivo era questo. Cherry ha fatto un gran lavoro, ed'è giusto creditarlo. Ma reputo quel logo molto invadente su un progetto personale. E come dire non sò. La nuova merceds 1500 che monta il motore renault. sul cofano invece della stella metto il prima il logo renault. è un esempio molto simile.
  8. Ciao ragazzi, non voglio creare flame o quant'altro XD Rispolverando i miei archivi ho trovato un programmino che feci per un amico. Il tutto permetteva semplicemente di rimuovere lo spash screen che avviene quando si usa il plugin per Rpgmaker 2003 di DynRpg. Magari può servirvi, o no. Fatto sta, che a me non serve perché non uso più rpgmaker da tanti anni ormai. Può essere utile in modo da non avere lo spash screen iniziale ma di poter creditare Cherry in modo diverso. Così da essere meno invadente nei "nostri" giochi. http://www.mediafire.com/file/6tcexv7tqrgn0tg/Dynrpg_Logo_Remover.rar/file Se avete problemi chiedete pure. Ma ho testato funziona ^^
  9. Mai sentito phantom brave XD. Ostacoli non ho pensato a questa possibilità ma è una buona idea. Live action intendevo che quando si effettua un combo con un alleato appaiono una sequenza di tasti da premere. Ogni colpo mancato e un danno in meno fatto al nemico. Ho voluto distaccarmi dal classico BS e proporre qualcosa che non annoia ma al tempo stesso mantiene il vecchio stile dei turni. Questo è un BS dove anche il millimetro fa la differenza. Quel video lho caricato durante il post ma è vecchiotto. Appena finisco di sistemare alcune cosette faccio un video di una battaglia completa. I drop ad esempio per prenderli il giocatore deve andarci proprio sopra e raccoglierlo. Non vengono dato alla fine della battaglia ma durante la partita. Prima di terminare, anche quando i nemici sono tutti KO. C'è il turno di ricognizione dove appunto gli eroi possono prendere gli ultimi drop rimasti se non lo hanno fatto. Per vedere i likos in azione servirà ancora tempo. Il BS e tutto dinamico niente di tutto ciò e presente nella scena. Tramite una decina di script vengono generati eroi, nemici, ambiente ecc. Ecc. Insomma sto cercando di realizzare un BS che non annoi il giocatore
  10. Mentre ero nel forum visionando i progetti mi sono accorto che manca proprio il mio. Alcuni conoscono già questo progetto, Altri invece no. Ebbene voglio presentarlo anche se in riardo. ( Logo Realizzato da Saul che ringrazio tantissimo, un vero capolavoro ) Riassumo la trama perché e veramente estesa, Stavo anche scrivendo un libro per non mancare i dettagli. Si tratta di un RPG fantasy. Caratterizzato da delle creatue chiamate Likos Diverse tra loro. Dove ognuna di queste, assimilate ad un uomo, dona un potere elementale. Il gioco consiste ne ritrovare dei sigilli creati da un mago per bloccare un varco temporale creato da dei demoni. Da dove fuoriescono queste creature, Malvagie o buone. L'obiettivo del gioco e ritrovare i sigilli sparsi per il mondo e bloccare il portale dimensionale. Stile del Gioco: Il gioco è basato su piu mappe globali open World ed interi curati al dettaglio. C'è la possibiltà di giocare utilizzando il Joypad, (Che personalmente utilizzo molto per questo genere di giochi) rendendo l'esperienza di gioco ancora più entusiasmante. Anche perché il gioco stesso è basato sui tasti del joypad compatibile Play Station. Battle System: Il punto forte del gioco. Si tratta di un Battle System Tattico Live Action. Dove anche il millimetro può fare la diffirenza in un battaglia. Ogni Eroe ha un Range di movimento ed un range di attacco. così per i nemici. Si possono attuare mosse di preparazione spostando gli alleati in modo da attirare il nemico in posizioni diverse. L'IA dei nemici o molto flessibile e dinamica e non stupida. I nemici tendono ad attaccare l'eroe che rientra nel loro raggio di azione, e valutano se è il caso di attaccare o restare in disparte con gli altri suoi alleati in modo da avere un vantaggio numerico. Se due o più eroi rientrano nel raggio di azione di un nemico, il nemico tente ad attaccare l'eroe con meno HP degli altri per avere un vattaggio. Gli eroi possono evocare Likos assorbiti dai loro simLikos (likos Assimilati) e sfruttarne il loro potere in battaglia. Possono eseguire tecniche di attacco o combo se vicini. ovviamente utilizzare un combo porterà inevitabilmente la fine de turno anche dell'altro eroe che ha usato la combo. Quindi e utile valutare ogni attacco. Danni o caratteristiche variabili a seconda del tipo di terreno che si incontra e molto altro ancora... Battle System Attuale ( Mappa di Debug ) Vecchio Battle System http://www.makerando.com/makshack/muploads/1424469561.jpg Alcune Screenshoot del gioco http://www.makerando.com/makshack/muploads/1424691520.png http://www.makerando.com/makshack/muploads/1405896468.jpg Breve video del Battle System in fase di Debug IA del nemico.
  11. Si è fluido. Non come il motore di Mire ma gira bene. Ho solo un piccolo problema da capire. Avviando il file html da chrome non va, mentre da edge o firefox si. Invece avviando il file html da un webserver funziona su tutti i browser credo sia un problema di funzionalità, come libreria utilizzo Three.js Quello che si può fare con Three.js e veramente illitato. ecco alcuni esempi https://threejs.org/examples/ Forse e proprio questa libreria che ha qualche problema boh. devo indagare. La console non dice nulla purtroppo
  12. Porto nuovità. Finalmente sono riuscito ad adattare lo shader delle luci di Mire per il WebGL. ovvero convertire uno shader HLSL in Fragment. eccovi un paio di screen
  13. Buongiorno a tutti non avendo una sezione ben precisa credo che questa sia la più indiciata. In caso contrario potete spostare. Tempo fà un utente mi chiese come avevo realizzato la skin di Mire e se potevo in qualche modo aiutarlo ad averne una simile. Allora mi venne l'idea di fare dei kit skin per applicazioni, updater, patcher o altro ancora. Ebbene volevo informarvi che ralizzo skin su richiesta completamente personalizzabili ed animate. per .NET o Qt C++ Vi mostro alcuni miei lavori fatti. Una di queste è Glassing Theme Controlli come la progress bar o il CollapsableBox sono animati. Questa è possibile scaricarla gratuitamente da qui e provarla Glassing Theme Questa è ancora in fase di svluppo. League of Legend Theme Questa invece è quasi completa, manca solo qualcosina poi la rendo pubblica. Un omaggio ai fan di questo gioco Anche qui tutto animato, come pulsanti, Immagini che ruotano e vari menu. Se a qualcuno interessa chiedete pure ;) Il tutto è realizzato tramite codice puro. Niente immagini o roba simile. Unicamente GDI e tanto codice.
  14. uhm no semplicemente perché per far funzionare il Node.js serve appunto un server. mentre nel mio caso ho deciso di fare semplicemente uno stand-alone funzionate senza nessuna dipedenza. quindi in pratica qualsiasi dispositivo in grado di poter aprire una pagina html, può tranquillamente avviare l'output del gioco senza ricevere nessun errore o una mancata libreria. Apparte che poi il JSON è semplicissimo, Basta giocare con la manipolazione delle stringe ed ottenere una struttura come si deve. L'undica differenza a non voler usare il Node.js è che una mappa salvata in formato JSON, non puoi essere letta con il parse. ad esempio Utilizzando il Node.JS 'use strict'; const fs = require('fs'); let data = fs.readFileSync('mappa1.json'); let mappa = JSON.parse(data); Mentre la mia tecnica sta nel dichiarare un file javascript ma con una variabile che contiene tutta la struttura json. ed utilizzare l'oggetto come semplice contenitore array senza parsare niente.
  15. Credo di aver passato anche questa prova :D Vi allego una screen delle ultime modifiche e funzionalità. Principalmente, il C++ non è così semplice come il .net da programmare, E trovare una libreria che faccia esattamente quello che mi serve è pò complicato. Mi sono dovuto creare un interprete JSON ed una classe ad hoc in grado di generare codice JSON compatibile con javascript nativamente. senza l'utilizzo di tool ad esempio "Node.js" che facilitano il lavoro. Come si nota dalla screen In alto nel menu Tool -> Export to JSON Anche se per la nostra vista è poco chiaro dal blocco notes A noi interessa che funzioni. Ma aprendo il file con un adeguato editor diventa tutto leggibile. Quello che a noi interessa è appunto il risultato finale Per ora sono abbastanza soddisfatto del risultato e mi fermo un pò su questo progetto. Magari chissà forse lo continuo quando ho un pò di tempo libero. ( Che mi è molto raro ormai.) Ricordo che tutto e completamente OpenSource raggiungibile da qui: https://github.com/Thejuster/Mappy Se avete vogliadi continuarlo o qualcuno è interessato a capire il funzionamento, potete trovare tutto l'occorrente li sopra.
  16. @Raffa50 Qualcosina si e volevo chiarere proprio questi punti. Prezzo Per quanto riguarda il prezzo,Per giochi realizzati con Mire, non richiede una licenza particolare. Perrelease disponibili per Windows, linux e Mac e gratiuto. Ciò obbliga però lo SplashScreen di Mire è ne vienta la vendita. Pagando invece una licenza PRO per una determinata piattaforma, allora è possibile realizzare giochi commerciali a pagamento. Senza restrizioni e limitazioni. Scripting Mire utilizza Javascript e LUA. questo per rendere i giochi realizzati con esso disponibili per altre piattaforme come PS4 etc. ( a questo ci arriviamo tra poco ) Battle System Il Battle System è un sistema laterale molto simile a quello di RPG Maker. Tutto scritto in javascript ovviamente e modificable linea per linea dall'utente. Framework e Piattaforme di destinazione. Il motore di Mire non utilizza MonoGame attenzione. MonoGame è utilizzato dall'editor ma non dall'engine. L'eseguibile varia da piattaforma a piattaforma. Grazie ad alcune librerie come EMScripten ed FNA ad esempio, che trasformano l'interno eseguibile in WebGL. convertendo tutto l'esegubile in Javascript ed WebGL. Per questo Mire riesce a girare su qualuque dispositivo anche mobile senza installare nessun Framework di destinazione. Ovviamente non è una bella cosa giocare ad esempio su Windows in un pagina web. Per questo motivo, se si vuol dare all'utente finale un'esperienza migliore si seleziona la giusta piattaforma ed il suo rispettivo eseguibile. Ma ciò non significa che si potrebbe tranquillamente giocare direttamente dal browser. ad esempio questo è un test output in HTML5 http://2.42.202.145/MireWeb/ la connesione è lenta perché è indirizzata al mio server ma è giusto per dare un idea. è proprio una versione base
  17. bel progetto mino, seguo da tempo i tuoi sviluppi. Te la cavi molto bene con ue. Mi piacciono anche i disegni. Niente da dire, tranne che "Buona Fortuna" hai la mia stima :) Non ho ben capito il funzionamento però. é un SideScrolling oppure movimento libero?
  18. L'idea è buona mi sa che farò proprio qualche piccolo video tutorial style professional per spiegare i primi passi. Molti abbandono proprio al primo errore credendo che non funzioni. Ma invece non è così
  19. Si Mire è in C#, mentre Mappy in C++ che è openSource su git. Purtroppo quell'eccezzione all'avvio quando si crea un progetto, ancora non capito dove sia il problema. In pratica il programma tenta di scrivere un file "recents.dat" che contiene la lista dei file recenti. ma per qualche strano motivo, windows blocca la creazione di quel file impedendo l'accesso al programma a scrivere su quel file. Anche se lanciato come amministratore. Per farlo funzionare bere, basta creare il progetto. poi chiudere il programma e riaprire il progetto puff.
  20. @Raffa50 certo, per me non ci sono problemi. Io ho un unico nemico da tanti anni, ed'è japponese lol. per il resto ho tanti amici. Semplicemente perché io sono per la produzione. E se posso condividere il mio sapere per ottenere qualcosa di meglio, non vedo dove sia il problema. Non è una questione di engine o di prevalenza su un tool o l'altro. Ma proprio perché amo programmare e sono per l'open (ovviamente dove posso)
  21. Tengo a precisare una cosa, Mi dispiace solo che forse hai frainteso un mio probabile contributo con un qualcosa che hai vagamente immaginato come "tirare acqua al tuo mulino" Anche perché non ne ho bisogno credimi... Se guardi sul tuo git, avevo fatto Frok del tuo progetto per contribuire, e per questo motivo ti ho scritto quel topic. Sono solo rammaricato su questa frase perché credo di non aver detto nulla di male o nulla di cattivo sul tuo progetto. Se così fosse, se sbadatamente ho scritto qualcosa che può essere interpretata come un offesa chiedo scusa in anticipo. Detto questo, Buona fortuna.
  22. Uhm non so se può essere utile per un progetto rpg. Per singole Sprite, avere tutto ottimizzato e una gran cosa. Met per i charaset che sono già ottimizzati per frame e dimensioni credo sia inutile.
  23. Mappy il logo del progetto XD L'ho fatto con quei generatori che si trovano online gratuitamente. era molto carino e l'ho utilizzato come logo del progetto. no i frame vanno divisi per animazione di movimenti. Le direzioni ho lasciato le classiche 4, uhm ma penso di poterle far definire all'utente finale. i frame intendo la sequenza di animazioni per un direzione. ad esempio questa screen 4 Direzioni * 9 Frame http://i.imgur.com/gHpOxaJ.png L'algoritmo è molto facile Per la larghezza di ogni singolo frame basta dividere la larghezza dell'intero file, per il numero di frame specificato. this->char_sizeW = map.width() / TotalFrame; this->char_sizeH = map.height() / TotalDirection; int sourceX = iFrame * char_sizeW; rectSource.X = (m_iFrame / TotalDirection) * char_sizeW; int sourceY = Direction * char_sizeH; Al resto pensa l'oggetto Character a tener la posizione, frame, movimenti ed animazione. Aggiungendo semplicemente al metodo update glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); makeCurrent(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); QColor color = QColor::fromRgb(153,204,255); qglClearColor(color.dark()); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_MULTISAMPLE); static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); glShadeModel(GL_FLAT); glDisable(GL_CULL_FACE); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glMatrixMode(GL_MODELVIEW); glPopMatrix(); //Update Cycle Player and NPC ( Character class Object ) Player->Update(); NPC00->Update(); NPC01->Update(); } Credo che cmq l'idea di avere anche più direzioni sia buona rispetto alle classiche 4 che siamo abituati sempre a vedere.
  24. Porto qualche news anche per questo piccolo progettino nato giusto per sperimentare fin quando posso arrivare lontano utilizzando c++ come linguaggio. IDE Migliorato con funzioni aggiuntive come matita, gomma, salvataggio e apertura di mappe. Salvataggio in formato binario compatibile con tutti i sistemi operativi ovviamente. Screen dall'engine Utilizzo dei Charaset I Charaset possono essere dinamici con dimensioni diversi e frame diversi. Ad esempio posso utilizzare un Chara grande 3 volte quello standard con 8 frame ad esempio. Basta specificarlo nel costruttore ed il motore elabora in modo automatico tutti i frame e la suddivisione esatta. Semplicemente creando un vero e proprio oggetto denominato Character. //@param Nome del file //@param Numero di Frame Character *NPC = new Character("Hero1",8); //Movimento automatico con animazione automatica. //Si sposta gradualmente in un'altra casella NPC->MoveDown(); Avevo pensato anche di implementare tipo delle azioni comuni. un IA ad esempio, un percorso da seguire. Per ora ho elaborato un semplice template che poi implementerò quando posso. #define CH Character template <class T> class Action { T value[1000]; private: int counter = 0; public: struct TAction { public: CH *npc; DWORD act_id; } void Add(int id) { value[counter] = id; counter;; } };
  25. Carina come idea. Ma ti dò alcuni consigli. Ho dato un occhiata al codice, ed'è privo di commenti. Cosa fondamentale in un progetto OpenSource di questa portata. Ovviamente io non ho problemi a leggero, o a capirne il funzionamento. Ma qualcuno meno esperto che voglia dare anche un piccolo contributo diventa un impresa. non sapendo appunto una determinata variabile cos'è ed a cosa fà riferimento. O una funzione cosa faccia. Un Engine Open deve avere una documentazione estesa, il più chiaro possibile. Fin quando è un programma comune, va bene. Ma quando si tratta di motori, il tutto deve essere commentato nei minimi particolari proprio per evitare di perdersi. Consigli che posso darti ora, Ovviamente basandoti su un editor non proprietario, devi stare a ciò che l'editor scrive, di conseguenza adattarti. Durante la fase di render ti consiglio di creare una sorta di Fall of View. Posso dirti che ho testato anche con C++ tramite le openGL ed ugualmente è meno performante del mio motore. una cosa è disegnare a video esempio 100.000 sprite ed un'altra disegnarne 50. Mire ovviamente non utilizza nel il primo, e ne il secondo esempio. Usa un sistema diverso. anche perché oltre a disegnare se semplici sprite, deve anche applicare shader come le luci differite , ombre, etc. eppure su questo lag = 0. per il resto bella iniziativa. Se ti servono consigli o suggerimenti posso darti qualche piccolo spunto. Edit: Ti segnalo il primo bug. Manca la cartella ProjectStructure. Eccezione non gestita foreach (string newPath in Directory.GetFiles("ProjectStructure", "*.*", SearchOption.AllDirectories)) File.Copy(newPath, newPath.Replace("ProjectStructure", projectDir), true); Evidentemente hai dimenticato di committare la cartella della struttura base del progetto.
×
×
  • Create New...