Jump to content
Rpg²S Forum

Lomax_Iced

Utenti
  • Posts

    221
  • Joined

  • Last visited

Everything posted by Lomax_Iced

  1. Wo calmatevi con le offese. E soprattutto con le vili illazioni. Tratto programmazione dapprima che inventassero il machine learning. Siete fastidiosi e maleducati. Una demo...la stavo preparando. Ma francamente non perderò più tempo dentro questo sito.
  2. Cavolo è vero! Ho dimenticato la ciccia Ora dovrebbe andare: /*: * @target MZ * @plugindesc Permette di attivare combo in battaglia basate sulla presenza di specifici personaggi nel party. * @author Massimo Bivona * * @param ComboSkillID * @text ID Skill Combo * @desc L'ID della skill che i personaggi possono attivare in combo. * @type skill * @default 1 * * @param ComboMPCost * @text Costo MP Combo * @desc Il costo in MP per attivare la combo. * @type number * @default 20 * * @help * Utilizza il tag <ComboMember> nelle note dei personaggi per indicare chi può attivare la combo. * Esempio di uso nella nota del personaggio: <ComboMember> */ (() => { const parameters = PluginManager.parameters('ComboPlugin'); const comboSkillID = Number(parameters['ComboSkillID'] || 1); const comboMPCost = Number(parameters['ComboMPCost'] || 20); Game_Party.prototype.canUseCombo = function() { // Verifica se ci sono abbastanza MP e se i membri con <ComboMember> sono nel party. return this.members().some(member => member.actor().meta.ComboMember && member.mp >= comboMPCost); }; const _Game_BattlerBase_canUse = Game_BattlerBase.prototype.canUse; Game_BattlerBase.prototype.canUse = function(item) { if (item.id === comboSkillID && this.isActor()) { return $gameParty.canUseCombo() && _Game_BattlerBase_canUse.call(this, item); } return _Game_BattlerBase_canUse.call(this, item); }; const _Game_Action_apply = Game_Action.prototype.apply; Game_Action.prototype.apply = function(target) { if (this.item().id === comboSkillID) { // Riduci gli MP di tutti i membri idonei per la combo. $gameParty.members().forEach(member => { if (member.actor().meta.ComboMember) { member.gainMp(-comboMPCost); } }); } _ Game_Action_apply.call(this, target); }; })(); Ora ho fornito più spiegazioni su come utilizzarlo in modo corretto. Comunque per il discorso richieste passate, io non guardo l'anno di pubblicazione, di solito leggo la richiesta e poi provo a soddisfarla, per me è anche una sorta di esercizio per vedere se sono migliorato con la programmazione. Magari migliorando lo stile di scrittura dei plugin che creo e soprattutto anche velocizzarmi nel realizzarne uno. Però ovvio hai ragione devo seguire le regole del sito e fornirvi anche una demo.
  3. Ho realizzato lo stesso plugin sia per quanto riguarda i progetti realizzati con RPG Maker MV che con MZ. Ovviamente ho dovuto fare delle modifiche ma la funzione è praticamente la stessa ovvero conferire l'effetto profondità alla camminata dei personaggi simulando appunto l'effetto di avvicinarsi e allontanarsi da noi quando ci si sposta in mappa. Se vi ricordate in Finale Fantasy 8 c'era una cosa del genere. Ma adesso veniamo al plugin: /*: * @target MZ * @plugindesc Simula l'effetto profondità di camminata. * @author Massimo Bivona * * @param Scala Minima * @text Scala Minima * @type number * @decimals 2 * @default 0.50 * @desc La scala minima applicata ai personaggi nella parte alta della mappa. * * @param Scala Massima * @text Scala Massima * @type number * @decimals 2 * @default 1.00 * @desc La scala massima applicata ai personaggi nella parte bassa della mappa. * * @help Questo plugin permette di simulare un effetto di profondità scalando i personaggi basandosi sulla loro posizione Y sulla mappa. */ (() => { const pluginName = "DepthScaling"; const parameters = PluginManager.parameters(pluginName); const minScale = Number(parameters['Scala Minima'] || 0.5); const maxScale = Number(parameters['Scala Massima'] || 1.0); const _Sprite_Character_updateScale = Sprite_Character.prototype.updateScale; Sprite_Character.prototype.updateScale = function() { _Sprite_Character_updateScale.call(this); this.updateDepthScale(); }; Sprite_Character.prototype.updateDepthScale = function() { var mapHeight = $gameMap.tileHeight() * $gameMap.height(); var charY = this.y; // Calcolo della posizione relativa sullo schermo (0.0 = alto, 1.0 = basso) var relativePosition = charY / Graphics.height; // Calcola la scala basata sulla posizione Y con interpolazione lineare tra Scala Minima e Scala Massima var scale = (maxScale - minScale) * relativePosition + minScale; // Applica la scala modificata allo sprite del personaggio this.scale.x = scale; this.scale.y = scale; }; })();
  4. Buona Pasqua gente! 🍷 Oggi vorrei proporvi uno script simpatico. Avete presente l'effetto profondità donato ai personaggi in Finale Fantasy 8 ?! Ossia quell'effetto che li mostrava piccoli piccoli se lontani da noi e più definiti se vicini a noi...?! Ecco questo plugin permette di dare questo effetto ai vostri progetti realizzati con RPG Maker MV. /*: * @plugindesc Modifica la scala dei personaggi in base alla loro posizione Y per simulare l'effetto profondità in RPG Maker MV. * @author Massimo Bivona * * @param Scala Minima: * @desc La scala minima applicata ai personaggi nella parte alta della mappa. * @default 0.5 * * @param Scala Massima: * @desc La scala massima applicata ai personaggi nella parte bassa della mappa. * @default 1.0 * * @help Questo plugin permette di simulare un effetto di profondità scalando i personaggi basandosi sulla loro posizione Y s/nella mappa. */ (function() { var parameters = PluginManager.parameters('DepthScaling'); var minScale = Number(parameters['Scala Minima'] || 0.5); var maxScale = Number(parameters['Scala Massima'] || 1.0); var _Sprite_Character_updateScale = Sprite_Character.prototype.updateScale; Sprite_Character.prototype.updateScale = function() { _Sprite_Character_updateScale.call(this); this.updateDepthScale(); }; Sprite_Character.prototype.updateDepthScale = function() { var mapHeight = $gameMap.height() * $gameMap.tileHeight(); var charY = this.character.screenY(); // Calcolo della posizione relativa sulla mappa (0.0 = alto, 1.0 = basso) var relativePosition = charY / mapHeight; // Calcola la scala basata sulla posizione Y con interpolazione lineare tra Scala Minima e Scala Massima var scale = (maxScale - minScale) * relativePosition + minScale; // Applica la scala modificata allo sprite del personaggio this.scale.x = scale; this.scale.y = scale; }; })(); Spero possa esservi utile 😎
  5. Ma guarda che non occorre smanettare troppo. Occorre solo inserire un .hide nelle finestre che non si vogliono far visualizzare. Ad ogni modo ecco uno script che penso possa facilitare le cose: (function() { // Sovrascrivi il metodo create della scena di equipaggiamento const _Scene_Equip_create = Scene_Equip.prototype.create; Scene_Equip.prototype.create = function() { // Esegui il metodo originale _Scene_Equip_create.call(this); // Nascondi o rimuovi le finestre che non vuoi this._statusWindow.hide(); // Nasconde la finestra dello stato this._commandWindow.hide(); // Nasconde la finestra dei comandi this._slotWindow.hide(); // Nasconde la finestra degli slot this._itemWindow.hide(); // Nasconde la finestra degli oggetti }; })();
  6. // == Plugin Parameters == /*:it * @plugindesc Plugin per combo tra due personaggi nel party. * * @param ComboSkillID * @text ID Combo Skill * @desc ID della skill che i personaggi possono attivare in combo. * @type skill * @default 1 * * @param ComboMPCost * @text Costo MP Combo * @desc Costo in MP per attivare la combo. * @type number * @default 20 * * @help Questo plugin consente ai personaggi di attivare combo in battaglia * spendendo un tot di MP per attivare una skill speciale. * * Per utilizzare la combo, aggiungi la tag <Combo> alla descrizione della skill * che desideri sia disponibile solo tramite combo. */ (function() { var parameters = PluginManager.parameters('ComboPlugin'); var comboSkillID = parseInt(parameters['ComboSkillID']) || 1; var comboMPCost = parseInt(parameters['ComboMPCost']) || 20; // Override per verificare se la skill è disponibile solo tramite combo var _Game_BattlerBase_canUse = Game_BattlerBase.prototype.canUse; Game_BattlerBase.prototype.canUse = function(item) { if (item.meta.Combo) { return false; } return _Game_BattlerBase_canUse.call(this, item); }; // Override per verificare se i personaggi hanno abbastanza MP per attivare la combo var _Game_ActionTest = Game_Action.prototype.testComboSkill; Game_Action.prototype.testComboSkill = function() { if (this.isCombo()) { var subject = this.subject(); var action = this.item(); var comboSkill = $dataSkills[comboSkillID]; if (subject.mp >= comboMPCost && subject.isStateAffected(1) && comboSkill) { this.setSkill(comboSkillID); this.setSubject(subject); return true; } } return _Game_ActionTest.call(this); }; })(); Spero sia utile senza troppo togliere a yanfli
  7. // ==Plugin Name== // Fusione Plugin // Author: Massimo Bivona // ==/Plugin Name== (function() { // Aggiungi un nuovo comando al menu principale per la fusione di oggetti const _Scene_Menu_createCommandWindow = Scene_Menu.prototype.createCommandWindow; Scene_Menu.prototype.createCommandWindow = function() { _Scene_Menu_createCommandWindow.call(this); this._commandWindow.setHandler('fusione', this.commandFusione.bind(this)); }; // Definisci l'azione del comando di fusione Scene_Menu.prototype.commandFusione = function() { SceneManager.push(Scene_FusioneItems); }; // Definisci la scena per la fusione di oggetti function Scene_FusioneItems() { this.initialize(...arguments); } Scene_FusioneItems.prototype = Object.create(Scene_MenuBase.prototype); Scene_FusioneItems.prototype.constructor = Scene_FusioneItems; Scene_FusioneItems.prototype.initialize = function() { Scene_MenuBase.prototype.initialize.call(this); }; Scene_FusioneItems.prototype.create = function() { Scene_MenuBase.prototype.create.call(this); this.createFusioneWindow(); }; Scene_FusioneItems.prototype.createFusioneWindow = function() { this._fusioneWindow = new Window_Fusione(0, 0); this.addWindow(this._fusioneWindow); }; // Finestra per la fusione di oggetti function Window_Fusione() { this.initialize(...arguments); } Window_Fusione.prototype = Object.create(Window_Selectable.prototype); Window_Fusione.prototype.constructor = Window_Fusione; Window_Fusione.prototype.initialize = function(x, y) { const width = Graphics.boxWidth; const height = Graphics.boxHeight; Window_Selectable.prototype.initialize.call(this, x, y, width, height); this.refresh(); }; Window_Fusione.prototype.maxItems = function() { return $gameParty.numItems($dataItems[1]); // Cambia l'ID dell'oggetto se necessario }; Window_Fusione.prototype.item = function() { return $dataItems[1]; // Cambia l'ID dell'oggetto se necessario }; Window_Fusione.prototype.drawItem = function(index) { const item = this.item(); const rect = this.itemRectForText(index); this.drawText(item.name, rect.x, rect.y, rect.width); }; // Aggiorna la finestra Window_Fusione.prototype.refresh = function() { this.createContents(); this.drawAllItems(); }; })(); Spero può essere utile
  8. Ah ok. Vabbè nel caso di scene_title intesa come libreria, diverrà una libreria, pian piano dopo aver spiegato la struttura dello script di base in modo chiaro e chiave, introducendone anche la sua logica e quant'altro, facendo anche degli esempi, caricando delle minidemo, o dei link YouTube dove mostro i risultati visivi di quel che si è fatto. Insomma mi piace coinvolgere e fare appassionare. Ora vi racconto un aneddoto mio, tempi del liceo, la prof stava spiegando le funzioni, ed io le chiesi a che servono e lei non mi seppe rispondere, non potete capire quanto oggi la maledico ancora. Perché se mi avesse detto che mi sarebbero servite per fare ciò che faccio da ormai quasi vent'anni circa, io di sicuro iniziavo ad appassionarmi prima alla programmazione. Quindi alla base ho questo alimentare la curiosità di chi desidera appassionarsi alla programmazione, specie chi è ancora uno scolaro anzi, sono fortunati che certi concetti li hanno freschi in testa e l'apprendimento dovrebbe essere più lesto per loro. Comunque se dovessi ad un certo punto annoiare, fatemelo sapere. Presto inizierò, mi dispiace averlo pubblicato eliminando l'effetto sorpresa. Volevo pubblicarlo già pronto e strutturato.
  9. Mi piace l'idea di fare capire a chi fosse interessato a capire, la logica semplice che ci sta alla base di un progetto complesso. Io, ad esempio, studiando e facendo pratica nel corso degli anni ho capito che nulla è davvero ostico ed impossibile da realizzare. Bisogna solo dare la giusta chiave di lettura. Poi la parte più bella, prendere la teoria e darla in pasto alla pratica e veder crescere il codice da che è un piccolo girino function(){}; non ancora definito a che diventa, nel caso stretto una libreria compatibile con i progetti realizzati con RPG Maker MV capace di implementare le circa 195 funzioni che permetteranno agli utenti di personalizzare i loro Scene_Title. Intanto, durante il percorso, ad un certo punto, a chi seguirà, di sicuro gli si sbloccherà qualcosa, come è successo a noi, che di colpo abbiamo iniziato a generare script complessi in modo abbastanza direi naturale. E poi perché mi va. :) Spero sempre di non annoiare. Ovvio e se così fosse fermatemi.
  10. Sono utilizzati per gestire le irregolarità del frame rate dei giochi di RPG Maker MV, ma utilizzano approcci leggermente diversi. YEP_FpsSynchOption.js TDDP_FluidTimestep.js Traendo delle somme non c'è un plugin migliore rispetto che l'altro. La scelta è dipesa da ciò che tu reputi migliore per il tuo gioco. Vuoi che sia compatibile scattante con tutti i dispositivi? ..allora scegli Yanfly. Vuoi più fluidità? ... allora scegli TDDP.
  11. Giochi indiepad... Interessante. Comunque ho letto dopo che aveva già risolto con lo script del coniglio. Ad ogni modo vorrei aggiungere qualcosa in più ... Intanto risolvo la richiesta già risolta da Guardian. Solo perché l'avevo giusto scritta: Io l'ho pensata così: Mi creo una libreria (che posso estendere quanto mi pare e quando ne ho voglia) a cui il plugin che a breve vi mostrerò ne è dipendente. Pertanto: ItalianKeyboard.js Ora creiamo il plugin dipendente: InputPersonalizzato.js Come utilizzarlo nel modo migliore? Una sintesi.. i dettagli sono già stati scritti all'interno. Ovviamente sia la libreria che il plugin occorre che stiano entrambi nella cartella '*/js/plugins' Attiva InputPersonalizzato.js e tramite un evento in mappa puoi usare il plugin command per fargli fare qualcosa, tipo: InputPersonalizzato assign 65 "MioInput1" Oppure InputPersonalizzato call "MioInput1" Per rimuovere un'assegnazione invece dovrete scrivere: InputPersonalizzato remove 65 Se volessimo creare delle situazioni soggette a condizionio creare nuovi plugins traendo spunto dalla libreria, potremmo utilizzare il plugin "InputPersonalizzato.js" insieme a un'istruzione "if" in un evento o in un altro plugin per controllare se un input personalizzato è stato premuto o rilasciato. Esempio: InputPersonalizzato assign 65 "MioInput1" Per controllare se l'input "MioInput1" è stato premuto, puoi utilizzare il seguente codice in un evento oppure in un plugin: if (Input._currentState["MioInput1"]) { // l'input "MioInput1" è stato premuto } Se invece vuoi controllare se l'input "MioInput1" è stato rilasciato, puoi utilizzare il seguente codice: if (!Input._currentState["MioInput1"]) { // l'input "MioInput1" è stato rilasciato } Ed ecco qua. Penso sia semplice e intuitivo da poter essere usato anche a scopo didattico. Per capire sempre di più che fare questo genere di cose alla fine è facile. Occorre solo ragionarci un po' su.
  12. Secondo me il tuo codice va aggiustato. È ammirevole che tu da che avevi un problema a che l'hai risolto con le tue capacità. Questo ti fa onore. Ma non accontentarti. Piuttosto spingi di più. Essere programmatori è bello perché oh noi vogliamo che le cose vadano in un modo e facciamo in modo che ci vadano. Quindi insistiamo finché non escogitiamo la forma migliore che ci porta a realizzare ciò che ci necessità. Quindi avendo seguito fedelmente le tue idee ora ho appena creato questo: Mio script: Spero di essere stato utile.
  13. Plugin non ne conosco, ma piuttosto so qualche trucchetto.Ora se ho ben capito tu vorresti assegnare un ID immagine ad una variabile. Le immagini qui vengono gestite dagli Sprite, che sono oggetti grafici. Nel nostro caso possiamo utilizzarli da ponte per bypassare le limitazioni del tool e arrivare ad assegnare un ID immagine ad una variabile. È facile e furbesco guarda: Crea l'oggetto Sprite e lo lasci vuoto: var mySprite = new Sprite();Poi crei una sua var ambasciatrice: var myvariabile = 42;Tramite il comando meta assegni un ID alla variabile: mySprite.meta.variabileID = 'myVarID';Ora associamo la variabile all'oggetto Sprite $gameVariables.setValue(mySprite.meta.variableId, myVariable);E adesso dovremmo aver bypassato la limitazioneaccedendo alla variabile tramite l'ID dell'oggetto Sprite: var retrievedVariable = $gameVariables.value(mySprite.meta.variableId);Non ci resta che avviare un console.log e vedere che cosa ci rimanda indietro.Se stamperà 42 allora ce l'avremmo fatta! console.log(retrievedVariable);È un metodo, nulla preclude che ce ne siano di altri migliori.
  14. Io non capisco perché anziché soffermarvi al vediamo come si fa, piuttosto si perda tempo a rovistare fra variabili e metodologie di altri utenti che magari si hanno creato delle risorse wow ma che non soddisfano la richiesta e allora tutto muore lì. Cioè non c'è fin'ora nessuno che intanto setaccia le funzioni di base, il codice JavaScript compatibile con Rpg maker mv, tutti a dire Ah yanfly non ci ha pensato quindi niente pazienza. No. Invece. Yanfly non ci ha pensato e allora ci penso io, quanto meno ci ragioniamo su. È una piccola critica la mia non per offendere ma piuttosto per spronarvi. Siete d'accordo? Fatta questa premessa un po' così doverosa ora vi dirò la mia, vi mostro come può essere strutturato uno pseudo plugin che si occupa di gestire l'orientamento dello schermo in un gioco per smartphone. Creiamo dunque l'oggetto ScreenOrientation.js e destiniamolo nella cartella plugins del tuo progetto. function ScreenOrientation(){};Dentro di esso creiamo una sua var ambasciatrice. function ScreenOrientation(){var ScreenOrientation {};};Adesso è opportuno usare l'oggetto funzione setup. Ossia quel metodo che serve per verificare varie cose all'avvio del gioco. Nel nostro caso controllerà se il gioco è orientato in modo corretto. ScreenOrientation.setup = function() { if (window.innerWidth > window.innerHeight) { // Imposta l'orientamento su orizzontale screen.orientation.lock("landscape"); } else { // Imposta l'orientamento su verticale screen.orientation.lock("portrait"); } }; Ora esportiamo e come si suol dire, il gioco è fatto! module.exports = ScreenOrientation;Attiva il plugin dall'apposita sezione in RPG Maker MVe poi crea un evento che avvia la funzione tramite script. Digitando ScreenOrientation.setup();In questo modo, quando il gioco verrà avviato, il metodo "setup" dell'oggetto ScreenOrientation verrà chiamato e l'orientamento dello schermo verrà impostato in base alle dimensioni del dispositivo. Fai tante prove su dispositivi differenti e valuta se le cose funzionano bene per dispositivi di varia tipologia. Buon Making.
  15. No no sto costruendo un tutorial . mi è scappato il tasto e si è inviato per sbaglio ma volevo fare anteprima messaggio. Mi sto dedicando a Scene_Title siccome ho visto che nella sezione richieste plugin sento spesso chiedere come modificare il title appunto per personalizzarlo. Voglio spiegarlo in modo minuzioso prima, narrando bene la sua logica e poi così passare ad implementare sempre più funzionalità nuove che possono rendere quest'oggetto veramente potente. Contiamo circa ben 195 funzioni che possono essere applicate oltre a quelle presenti di default. Potrei inserirle e basta ma a me piace l'idea di spiegarne appunto la logica in dettagliato e chiaro. Ti faccio un esempio: Questo è: function Scene_Title(){}; Questo è l'oggetto in se. Ma quanti sanno davvero qual'è la logica di doverlo scrivere così ? Siamo pochi. Così come è rappresentato, per ora, indica che è una funzione che ne riceve e ne trasmette NULLA. Però c'è. Dalle () riceve argomenti/istruzioni esterne. Dalle graffe trasmette cosa gli si vuole far trasmettere. e quindi poi si procede. ... Che ne pensi? A me sembra interessante.
  16. /** * Oggi verrà analizzato in tutte le sue beltà lo Scene_Title * in modo che chiunque ma proprio chiunque oggi ne capirà il suo funzionamento */ PER I + NABBI: Lo Scene_Title è un oggetto che contiene, dentro di se, cose. (altri oggetti)
  17. Sì ma prima ti devo dare delle informazioni: Se vuoi creare un gioco online quanto segue non funziona. Se vuoi creare un gioco offline allora segui questa prassi: Nella cartella plugins del tuo progetto inserisci il file MsgBox.js è una libreria che ti potrà essere utile sempre in questo caso per fare visualizzare un popup di allerta. che ti comunica che tutto è ok oppure no. Dentro MsgBox.js scrivi queste istruzioni: //============================================================================= // MsgBox.js //============================================================================= function MsgBox() { throw new Error('This is a static class'); } MsgBox.msgBox = function(message, title) { if (typeof nw !== 'undefined') { var gui = require('nw.gui'); var win = gui.Window.get(); win.setAlwaysOnTop(true); gui.Window.open('index.html', { frame: false, width: 500, height: 150, position: 'center', resizable: false, show: false }, function(new_win) { var document = new_win.window.document; document.title = title || 'Message'; document.getElementById('message').innerHTML = message; document.getElementById('ok').addEventListener('click', function() { new_win.close(); win.setAlwaysOnTop(false); }); new_win.show(); }); } else { console.log(title || 'Message', message); } }; Può essere evocata così: MsgBox.msgBox('Il gioco è stato avviato correttamente!', 'Avviso'); Ora crea launcher.js e inserisci queste altre istruzioni: function checkLauncher() { var nomeLauncher = "launcher.exe"; // Inserisci qui il nome del launcher var lineaComandoCompleta = process.argv.join(" "); if (lineaComandoCompleta.indexOf(nomeLauncher) === -1) { alert("Apri il gioco tramite launcher!"); window.close(); } }; checkLauncher(); // Continua con l'avvio del gioco Per farlo partire inserisci questa sintassi in index.html: <script type="text/javascript" src="js/launcher.js"></script> Eccoti accontentato.
  18. "vorrei una piccola modifica" xD Ad ogni modo devi fare così: Vai nella cartella css del tuo progetto Trova il file Window_TP.css Aprilo con un buon code editor e Cerca la classe tpGauge Aggiungi queste istruzioni: .tpGauge { font-size: 0; /* Nasconde il numero di TP */ }; .tpGauge .gauge { background-color: #fff; /* Colore di sfondo della barra */ border: 2px solid #666; /* Bordo della barra */ height: 8px; /* Altezza della barra */ margin: 0 6px; /* Margine della barra */ width: 92%; /* Larghezza della barra */ }; Salva e chiudiPoi Recati nella cartella js e trova il main.js Dentro la funzione Window_TP.prototype.drawTpGauge Inserisci questo: Window_TP.prototype.drawTpGauge = function() { var gaugeHeight = this.contentsHeight() - 4; var rate = $gameParty.tpRate(); var color1 = this.tpGaugeColor1(); var color2 = this.tpGaugeColor2(); this.contents.clearRect(this.gaugeX(), this.gaugeY(), this.gaugeWidth(), gaugeHeight); if (Imported.YEP_CoreEngine) { var currentTp = Yanfly.Util.toGroup($gameParty.tp()); var maxTp = Yanfly.Util.toGroup($gameParty.maxTp()); var text = currentTp + ' / ' + maxTp; this.drawText(text, this.textPadding(), 0, this.contentsWidth(), 'left'); } this.drawGauge(this.gaugeX(), this.gaugeY(), this.gaugeWidth(), rate, color1, color2); if ($gameParty.tp() === 100) { if (this._gaugeFlash === undefined) { this._gaugeFlash = false; } this._gaugeFlash = !this._gaugeFlash; this.changeTextColor(this.systemColor()); this.drawText(this.tpRate() * 100 + '%', 0, 0, this.contentsWidth(), 'right'); this.changeTextColor(this.normalColor()); if (this._gaugeFlash) { this.drawGauge(this.gaugeX(), this.gaugeY(), this.gaugeWidth(), rate, '#ffff00', '#ffff00'); } else { this.drawGauge(this.gaugeX(), this.gaugeY(), this.gaugeWidth(), rate, color1, color2); } } else { this.changeTextColor(this.systemColor()); this.drawText } Window_Base.prototype.drawTpGauge = function(x, y, width) { var color1 = this.tpGaugeColor1(); var color2 = this.tpGaugeColor2(); var rate = $gameParty.tpRate(); if ($gameParty.tp() === 100) { if (this._gaugeFlash === undefined) { this._gaugeFlash = false; } this._gaugeFlash = !this._gaugeFlash; if (this._gaugeFlash) { this.drawGauge(x, y, width, rate, '#ffff00', '#ffff00'); } else { this.drawGauge(x, y, width, rate, color1, color2); } } else { this.drawGauge(x, y, width, rate, color1, color2); } }; Ora alla classe Window_TP aggiungiamo la funzione 'Brillare' e più o meno bisogna fa così: /** * Classe che rappresenta la finestra dei TP del gioco */ function Window_TP() { this.initialize.apply(this, arguments); } Window_TP.prototype = Object.create(Window_Base.prototype); Window_TP.prototype.constructor = Window_TP; /** * Inizializza la finestra dei TP */ Window_TP.prototype.initialize = function() { var width = this.windowWidth(); var height = this.windowHeight(); Window_Base.prototype.initialize.call(this, 0, 0, width, height); this.opacity = 0; this._tp = 0; this._maxTp = 0; this.brillare = false; // Nuovo attributo per la gestione dell'illuminazione della barra this.update(); }; /** * Imposta il numero di TP e il massimo di TP */ Window_TP.prototype.setTp = function(tp, maxTp) { if (this._tp !== tp || this._maxTp !== maxTp) { this._tp = tp; this._maxTp = maxTp; this.refresh(); } }; /** * Restituisce la larghezza della finestra */ Window_TP.prototype.windowWidth = function() { return 240; }; /** * Restituisce l'altezza della finestra */ Window_TP.prototype.windowHeight = function() { return this.fittingHeight(1); }; /** * Disegna la finestra dei TP */ Window_TP.prototype.refresh = function() { this.contents.clear(); var width = this.width - this.padding * 2; var rate = this._tp / this._maxTp; this.drawGauge(0, 0, width, rate, this.tpGaugeColor1(), this.tpGaugeColor2()); }; /** * Restituisce il colore 1 della barra dei TP */ Window_TP.prototype.tpGaugeColor1 = function() { return this.textColor(28); }; /** * Restituisce il colore 2 della barra dei TP */ Window_TP.prototype.tpGaugeColor2 = function() { return this.textColor(29); }; /** * Aggiorna la finestra dei TP */ Window_TP.prototype.update = function() { Window_Base.prototype.update.call(this); this.updateBlink(); // Chiamiamo il nuovo metodo per l'aggiornamento dell'illuminazione }; /** * Aggiorna l'illuminazione della barra dei TP quando questa è piena */ Window_TP.prototype.updateBlink = function() { if (this._tp >= this._maxTp) { this.brillare = !this.brillare; if (this.brillare) { this.contents.gradientFillRect(0, 0, this.width, this.height, this.tpGaugeColor1(), this.tpGaugeColor2(), true); } else { this.refresh(); } } }; Dopo aver preparato la tavola se magnaDiamo 2 proprietà nuove a Window_Base Per la precisione dentro la funzione Window_Base.prototype.updateTpb. Esempio: Hide TP Window_Base.prototype.drawActorTp = function(actor, x, y, width) { width = width || 186; var color1 = this.tpGaugeColor1(); var color2 = this.tpGaugeColor2(); this.drawGauge(x, y, width, actor.tpRate(), color1, color2); }; Show TP a 100 punti. Window_Base.prototype.updateTpb = function() { if (this._actor && this._actor.canMove()) { if (this._tpbTurnCount !== $gameParty.tpbTurnCount()) { this._tpbTurnCount = $gameParty.tpbTurnCount(); this.refresh(); if (this._actor.tp >= this._actor.maxTp()) { this.contents.clearRect(0, 0, this.contentsWidth(), this.contentsHeight()); var color = [this.textColor(30), this.textColor(31)]; var flashCount = 0; var flashInterval = 30; var gaugeWidth = this._width - 130; this._animationCount++; if (this._animationCount % flashInterval < flashInterval / 2) { this.contents.fillRect(0, 0, gaugeWidth, this.lineHeight(), color[0]); } else { this.contents.fillRect(0, 0, gaugeWidth, this.lineHeight(), color[1]); } } } } }; Spero di aver soddisfatto la richiesta. ;)
  19. A distanza di anni passava quasi per caso un Baldo... Coff coff...ehm... Vabbè ecco ciò che hai chiesto: //============================================================================= // Cambio grafica pagina //============================================================================= Game_Event.prototype.page_graphic = function(page, graphic, index = 0) { this.event().pages.image.characterName = graphic; this.event().pages.image.characterIndex = index; this.refresh(); }; Game_Event.prototype.page_priority = function(page, priority) { this.event().pages.priorityType = priority; this.refresh(); }; Game_Event.prototype.page_move = function(page, speed, freq, type = null) { const pageData = this.event().pages.moveRoute.list; pageData[0].code = 45; pageData[0].parameters = [type || 0]; pageData[1].code = 16; pageData[1].parameters = [speed]; pageData[2].parameters = [freq]; this.refresh(); }; Game_Interpreter.prototype.page_graphic = function(ev, page, graphic, index = 0) { $gameMap.event(ev).page_graphic(page, graphic, index); }; Game_Interpreter.prototype.page_priority = function(ev, page, priority) { $gameMap.event(ev).page_priority(page, priority); }; Game_Interpreter.prototype.page_move = function(ev, page, speed, freq, type = null) { $gameMap.event(ev).page_move(page, speed, freq, type); };
  20. Ecco qua, fammi sapere se va bene: //============================================================================= // ATB.js //============================================================================= /*: * @plugindesc Plugin per il sistema di battaglia Active Time Battle (ATB). * Versione: 1.0.0 * Autore: Massimo Bivona * Licenza: TeamFox-ExclusiveUse * * @param Velocità iniziale * @desc Velocità iniziale di tutti i personaggi in battaglia. * @default 50 * * @param Velocità massima * @desc Velocità massima di tutti i personaggi in battaglia. * @default 100 * * @help * Questo plugin permette di implementare il sistema di battaglia Active Time Battle (ATB) * in un gioco creato con RPG Maker MV. Il plugin gestisce il tempo di caricamento * dell'azione dei personaggi, il cambio del turno in base alla velocità e la pausa * del tempo di caricamento durante la selezione dell'azione. * * Questo plugin è stato creato da me ed è rilasciato con licenza TeamFox-ExclusiveUse. * * Per personalizzare il plugin, è possibile modificare i parametri: * * - Velocità iniziale: velocità di caricamento iniziale di tutti i personaggi. * - Velocità massima: velocità di caricamento massima di tutti i personaggi. * * Maggiori informazioni su come utilizzare questo plugin sono disponibili nella * documentazione online. */ (function() { // Dichiarazione dei parametri del plugin var parametri = PluginManager.parameters('ATB'); var velocitàIniziale = parseInt(parametri['Velocità iniziale']) || 50; var velocitàMassima = parseInt(parametri['Velocità massima']) || 100; // Dichiarazione della classe di battaglia function Battaglia() { this._personaggi = []; this._turno = null; } Battaglia.prototype.aggiungiPersonaggio = function(personaggio) { this._personaggi.push(personaggio); }; Battaglia.prototype.avanzaTempo = function(tempo) { this._personaggi.forEach(function(personaggio) { personaggio.avanzaTempo(tempo); }); }; Battaglia.prototype.selezionaProssimoTurno = function() { var minTempo = Infinity; var prossimoTurno = null; this._personaggi.forEach(function(personaggio) { if (personaggio.tempoCaricamento < minTempo) { minTempo = personaggio.tempoCaricamento; prossimoTurno = personaggio; } }); this._turno = prossimoTurno; this._turno.resettaTempoCaricamento(); }; // Dichiarazione della classe di personaggio function Personaggio(nome, velocità) { this._nome = nome; this._velocità = velocità; this._tempoCaricamento = 0; } Object.defineProperty(Personaggio.prototype, 'nome', { get: function() { return this._nome; }, configurable: true }); Object.defineProperty(Personaggio.prototype, 'velocità', { get: function() { return this._velocità; }, configurable: true }); Object.defineProperty(Personaggio.prototype, 'velocita', { get: function() { return this._velocita; }, set: function(value) { this._velocita = value; }, configurable: true }); return Personaggio; })(); È una base di partenza, niente di che. Se hai delle richieste particolari. Scrivi (Messaggio rivolto a tutti) se ho tempo e quando ho tempo rispondo.
  21. Sì. È possibile. Creerò qui qualcosa che realizzai io qualche anno fa e ora beh.. cerco di sfoltire il codice oppure spiegarvi giusto la prassi. In primo luogo occorre acquisire le Geo-Api del browser if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(successCallback, errorCallback); } else { alert("La geolocalizzazione non è supportata dal tuo browser."); } function successCallback(position) { // qui possiamo accedere alle coordinate della posizione attuale dell'utente var lat = position.coords.latitude; var lng = position.coords.longitude; }; function errorCallback(error) { alert("Errore durante l'accesso alla posizione GPS."); }; Questo vi permetterà di ricevere la posizione del client o utente.Possiamo quindi ora poter utilizzare le sue coordinate per posizionarlo sulla mappa del mondo reale. Per utilizzare una MapQuest potremmo creare...ma non sarà questo il caso... possiamo utilizzare uno script già compilato che è lo'OrangeMapQuest.js si occupa proprio di mettere a disposizione mappe reali a coloro che vogliono realizzare giochi online per Rpg maker mv. Queste mappe hanno il brutto vizio di geolocalizzare ma noi le useremo proprio a tale scopo quindi Fatte queste due cose possiamo già iniziare a creare il gioco. Occhio che si dovrebbe anche tutelare la sicurezza del giocatore. Quindi è prassi creare funzioni che si occupano di questo e di analizzare la connessione internet. Sono istruzioni minimalissime ma spero che vi abbiano riacceso l'entusiasmo. Rpg Maker MV è sottovalutato, date retta a me. È un foglio bianco. Spetta a voi fare un disegno wow oppure uno scarabocchio o lasciarlo in bianco.
  22. Sì. Forse ho qualcosa: BarraVita.js Spero che questo diverrà il tuo nuovo preferito. È completamente modificabile da editor, puoi modificare davvero qualsiasi cosa che riguarda l'indicatore di vita. Spero vi piaccia.
  23. Ciao anche se in ritardo sto mantenendo la mia promessa. (dovevo imparare) anche se in questo caso specifico c'è più da interpretare. Ecco qua: -occhio è parte dello script di IAVRA.questo poi va inserito al suo interno.
×
×
  • Create New...