Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
419 connectés actuellement
29679929 visiteurs depuis l'ouverture
17175 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Ellium -
posté le 17/05/2017 à 23:53:06 (23 messages postés)
| | Domaine concerné: script, evenements
Logiciel utilisé: Rpg Maker VX Ace
Bonjour/Bonsoir !
Je viens ici car je suis actuellement dans une posture un peu dérangeante : je trouve très peu de documentation sur le RGSS3 concernant les systèmes de combats. Donc je me livre à vous. Pour vous illustrer mon besoin j'ai codé en javascript (un langage que je maitrise mieux que le ruby et sa librairie dédiée aux jeux ^^") le système de combat qui me conviendrait : http://ellium.96.lt/battle_system/ -> en gros un système type a-rpg, demandant un rapidité d’exécution de mouvements, mais dans le layer/scène du tour par tour !
Si jamais des gens s'y connaissent en JS, je vous fournis ici le code que j'ai créé, peut être que vous pourrez m'aider à passer du js au ruby RGSS3 !
Spoiler (cliquez pour afficher)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
| function Character(name, life, emp_max, attack_stat){
this.name = name;
this.life = life;
this.emp_max = emp_max;
this.attack_stat = attack_stat;
console.log("a new character named : " + this.name + " was created" + this.life);
}
Character.prototype.attack = function(Object){
Object.life -= this.attack_stat;
}
Character.prototype.heal = function(){
this.life+=3;
}
//global var
Heroe = new Character("heroe", 20, 0, 1);
Ennemy = new Character("ennemy", 10, 20, 2);
//interface var
var battle_interface = document.getElementById("battle_interface"),
heroe_life_interface = document.getElementById("heroe_life"),
emp_ennemy_interface = document.getElementById("emp_ennemy"),
ennemy_life_interface = document.getElementById("ennemy_life");
//ennemy emp
var ennemy_emp = 0;
//potion healing
var potions = 5;
var gameLoad = false;
var action = false;
var keyWait = false;
var keyEvent = document.getElementById("keyEvent");
function act(choices){
if(choices == 0){
Heroe.attack(Ennemy);
ennemy_life_interface.innerHTML = Ennemy.life;
ennemy_emp -= 5;
emp_ennemy_interface.innerHTML = ennemy_emp;
action = false;
} else if(choices == 1){
ennemy_emp+=3;
emp_ennemy_interface.innerHTML = ennemy_emp;
action = false;
} else if(choices == 2){
if(Ennemy.attack_stat > 1){
Ennemy.attack_stat--;
}
ennemy_emp -= 3;
emp_ennemy_interface.innerHTML = ennemy_emp;
action = false;
}
battle_interface.innerHTML = "wait 2";
keyWait = true;
setTimeout(function(){
battle_interface.innerHTML = "wait 1";
}, 1000);
setTimeout(function(){ Battle(action); keyWait = false; }, 2000);
}
function object(choices){
if(choices == 0){
if(potions > 0){
Heroe.heal();
potions--;
}
heroe_life_interface.innerHTML = Heroe.life;
action = true;
}else if(choices == 1){
action = true;
}
battle_interface.innerHTML = "wait 2";
keyWait = true;
setTimeout(function(){
battle_interface.innerHTML = "wait 1";
}, 1000);
setTimeout(function(){ Battle(action); keyWait = false;}, 2000);
}
function Battle_init(){
//choices
var choices;
//init interface
heroe_life_interface.innerHTML = Heroe.life;
emp_ennemy_interface.innerHTML = ennemy_emp;
ennemy_life_interface.innerHTML = Ennemy.life;
Battle(false);
var chainAttacks = setInterval(function(){Ennemy.attack(Heroe); heroe_life_interface.innerHTML = Heroe.life;}, 3000);
return true;
}
function Battle(action){
if(Ennemy.life > 0 && Heroe.life > 0 && ennemy_emp < Ennemy.emp_max){
if(action == false){
battle_interface.innerHTML = "<input type='submit' value='heal * " + potions + " [A]' id='heal' onclick='object(0)'>" + "<input type='submit' value='nothing [Z]' id='nothing' onclick='object(1)'>";
}
if(action == true){
battle_interface.innerHTML = "<input type='submit' value='attack [A]' id='attack' onclick='act(0)'>" + "<input type='submit' value='action positive : sourire [Z]' id='action_pos' onclick='act(1)'>" + "<input type='submit' value='action négative : intimider [E]' id='action_neg' onclick='act(2)'>";
}
} else if(Heroe.life <= 0){
battle_interface.innerHTML = "You loose";
clearInterval(chainAttacks);
} else if(Ennemy.life <= 0){
battle_interface.innerHTML ="You win !";
clearInterval(chainAttacks);
} else if(Ennemy.life <= 0 && Heroe.life <= 0){
battle_interface.innerHTML ="Equalitie !";
clearInterval(chainAttacks);
}else{
battle_interface.innerHTML ="You win !";
clearInterval(chainAttacks);
}
} |
Donc si jamais vous vous y connaissez en script, ou que vous savez ou trouvez une bonne documentation j'écouterai attentivement vos conseils !
Merci d'avoir pris le temps de lire ^^"
|
winterskill -
posté le 18/05/2017 à 14:03:33 (927 messages postés)
| Empereur des bons gros meuh | Citation: je trouve très peu de documentation sur le RGSS3 concernant les systèmes de combats. |
"que celui qui a déjà trouvé de la documentation sur le rgss3 jette une pierre, et sur cette pierre, je bâtirai... euh... un truc."
non, plus sérieusement, en effet, c'est TRèS dur de trouver de la doc sur le rgss3. mais si tu vas dans les dossiers d'installation de rm, (dans program files (x86) je crois) tu trouvera un fichier d'aide au format chm. dedans, il y a une partie sur le rgss3 (en anglais).
|
"pommes de rainette et pommes d'API, API API Rest-e" | "A combattre sans périls, on triomphe sans gloire" - le cid ; (oui mais on gagne quand même non?...) | à soutenir absolument : https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men |
7163D -
posté le 18/05/2017 à 14:11:23 (946 messages postés)
| Votez Minimaliste | Sinon tu peux passer sur MV, il utilise le javascript
|
Minimaliste, le "." comme signe de ralliement. |
winterskill -
posté le 18/05/2017 à 14:14:08 (927 messages postés)
| Empereur des bons gros meuh | oui mais si il est sur vx ace, je pense que c'est pas pour rien...
(et puis sur mv aussi, trouver de la doc c'est dur)
|
"pommes de rainette et pommes d'API, API API Rest-e" | "A combattre sans périls, on triomphe sans gloire" - le cid ; (oui mais on gagne quand même non?...) | à soutenir absolument : https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men |
RitoJS -
posté le 18/05/2017 à 19:40:06 (801 messages postés)
| FalcomFan | J'utilise cette doc.
Si ça peut aider
http://rgss3.hudell.com/_index.html
|
Sauverez-vous le monde à temps ?. Moe Shit | Quartier Général |
Ellium -
posté le 18/05/2017 à 20:13:41 (23 messages postés)
| | Merci pour vos réponses ! Je vais essayer de me débrouiller avec RPGVXAce.chm et le lien de cette doc ^^.
|
winterskill -
posté le 18/05/2017 à 22:58:09 (927 messages postés)
| Empereur des bons gros meuh | @ritoJS : mais c'est absolument génial! merci beaucoup, ça va m'être très utile!
|
"pommes de rainette et pommes d'API, API API Rest-e" | "A combattre sans périls, on triomphe sans gloire" - le cid ; (oui mais on gagne quand même non?...) | à soutenir absolument : https://www.kickstarter.com/projects/1264023666/bushido-the-way-of-men |
Ellium -
posté le 22/05/2017 à 01:06:51 (23 messages postés)
| | Bonjour, j'ai encore besoin de votre aide ! En fait je souhaiterai faire en sorte de répéter l'attaque d'un ennemi en boucle (toute les 3 secondes par exemple) sans pour autant bloquer tout mon programme avec le "sleep" du ruby. Y aurai t-il une fonction qui permettrait de faire ça ? Un truc du genre setInterval() mais en ruby ?
EDIT :
En fait j'ai réussi à faire une fonction qui peut remplacer setInterval :
1
2
3
4
5
6
7
8
9
|
def set_interval
Thread.new do
loop do
$lifesb -= 1
p $lifesb
sleep 5
end
end |
Mais cependant, à cause du reload suivant
1
| SceneManager.call(Scene_Battle_modif) |
La variable "$life" (la vie du héro en gros), ne se met pas à jour correctement : comme la fonction set_interval est appelé plusieurs fois à chaque choix du joueur, je me retrouve avec une décrémentation des points de vie pas du tout constante... Si vous pouviez m'aider de ce point de vu la !
|
7163D -
posté le 22/05/2017 à 21:14:26 (946 messages postés)
| Votez Minimaliste | Tu peux faire sans thread :
1
2
3
4
5
6
7
8
9
10
11
|
#initialisation
t=0
interval = 3
#dans ta boucle principale
if gettime() - t > interval then
t=gettime()
execute_attack()
end
|
Sincèrement, c'est vraiment lourd d'utiliser les threads pour un si petit trucs.
(là j'ai fait ça à l'arrache, mais on peut facilement créer un petit gestionnaire qui s'occupe de ça)
|
Minimaliste, le "." comme signe de ralliement. |
Ellium -
posté le 22/05/2017 à 21:27:30 (23 messages postés)
| | merci pour ce petit bout de code ! Par contre j'ai une erreur au niveau de gettime() et la doc de ruby dit d'utiliser Time.now (je suppose que c'était le but de gettime ?)
|
7163D -
posté le 22/05/2017 à 22:31:05 (946 messages postés)
| Votez Minimaliste | Ah oui déso, je me rappelais plus le nom de la fonction donc j'ai mis ça, j'aurais du le préciser
|
Minimaliste, le "." comme signe de ralliement. | Index du forum > Entraide > [RESOLU] [VX Ace] Besoin d'aide pour la création d'un système de combat (javascript, RGSS3)
|
|
|