-
Posts
221 -
Joined
-
Last visited
Lomax_Iced's Achievements
Utente avanzato (3/7)
-
Effetto Profondità Camminata (in stile Finale Fantasy 8)
Lomax_Iced replied to Lomax_Iced's topic in PLUGIN e Javascript
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. -
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.
-
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; }; })();
-
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 😎
-
Richiesta modifica interna, menu EQUIP
Lomax_Iced replied to Satsume's question in Richieste PLUGIN e Javascript
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 }; })(); -
Richiesta plugin pesca (commission)
Lomax_Iced replied to WereWorld(Tm)'s question in Richieste PLUGIN e Javascript
. -
// == 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
-
// ==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
-
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.
- 7 replies
-
- #rpgmakermv
- #massimobivona
- (and 6 more)
-
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.
- 7 replies
-
- #rpgmakermv
- #massimobivona
- (and 6 more)
-
Che differenza c'è tra questi due plugin?
Lomax_Iced replied to TecnoNinja's question in Supporto PLUGIN e Javascript
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. -
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.
-
Creare una funzione che aggiunga oro random
Lomax_Iced replied to Nortas's question in Richieste PLUGIN e Javascript
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. -
Definire l'ID di un'immagine attraverso una variabile
Lomax_Iced replied to Sanny's question in Richieste PLUGIN e Javascript
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.