Bienvenue visiteur !
|

Statistiques
Liste des membres
Contact
Mentions légales
259 connectés actuellement
31164055 visiteurs depuis l'ouverture
4407 visiteurs aujourd'hui

Partenaires









Tous nos partenaires
Devenir partenaire
|
Messages postés par Berka Nombre de messages référencés sur Oniromancie (non supprimés): 98 Aller à la page: 1 2 3
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
berka -
posté le 10/01/2011 à 19:30:07. (493 messages postés) |

| L'opérateur << de Fixnum déplace l'objet d'un rang vers la gauche.
Il faut raisonner en binaire (noté 0bxxx en ruby)
1 = 0b1 = 1 << 0
2 = 0b10 = 1 << 1
4 = 0b100 = 1 << 2
8 = 0b1000 = 1 << 3
...
512 = 0b1000000000 = 1 << 9
et inversement avec l'opérateur >> (décale vers la droite)
& est un opérateur "bitwise" AND (et).
Si on prend 6 & 3
6 & 3 = 0b110 & 0b011 (équiv. 0b11, car les 0 à gauche s'annulent) = 2
Le fonctionnement: on énumère chaque bit de gauche à droite:
1 & 0; 1 & 1; 0 & 1
Dès que les deux bits sont égaux à 1 on marque 1, si un des bits est 0 on marque 0:
donc :
1 & 0 = 0;
1 & 1 = 1;
0 & 1 = 0;
ce qui fait:
6 & 3 = 0b110 & 0b011 = 0b010 = 2
Avec sa réciproque | (OR)
Dans Game_Map, ca sert à savoir la praticabilité en fonction de la direction (cf. les fleches de passabilité sur RMXP)
EDIT: doublé 
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Forum - [Geex] Et si on vous demandait votre avis? |
berka -
posté le 05/12/2010 à 22:06:28. (493 messages postés) |

| Le meilleur principe est de faire deux types d'offre.
Une offre pour l'amateur qui teste son truc et ne tire aucun bénéfice: contribution libre/<10,-€
Une offre pour le pro, celui qui a souhaite tirer du blé dans le logiciel : >40,-€
Parce que si vous mettez une contribution trop élevée sur la tête de l'amateur, vous vous coupez un bras. Il faut une base de publicité, d'évaluation pour pouvoir éventuellement saisir une offre pro. Offre pro qui peut donner davantage de possibilités: support technique, déploiement...
Car à partir du moment où la contribution est élevée, il y a obligation de résultat. Faire une offre "starter" peut vous éviter pas mal de désagréments juridiques et fournit un large socle promotionnel du système. Et puis cela évite considérablement le piratage.
L'offre pro peut etre suivie, tracée : si vous vous fixer des critères stricts et précis pour déterminer quelle est l'offre à laquelle doit (obligatoirement?) souscrire un maker, vous saurez précisément quelle clientèle vous avez (donc possibilité d'adaptation du système), quels problèmes sont rencontrés.
La technique de la contribution ponctuelle, fondée sur une "taxe" à la publication du jeu me semble pas mal: cela favorise le sérieux des jeux rendus publics. Du coup, cette stabilité devient celle de votre moteur. Car à partir du moment où un jeu Geex est publié, le contenu du jeu et votre système sont fusionnés. Un jeu naze sera mauvaise pub pour Geex.
La contribution proportionnelle au bénéfice du jeu est pas mal aussi, voir meme plus juste pour le maker. Mais ce système me semble beaucoup trop complexe à mettre en place. Meme si on peut évaluer le nombre de téléchargements, on ne peut pas connaitre la prise réelle de bénéfices du créateur.
Pour conclure: voyez la contribution à la baisse. Moins de soucis par la suite. Quitte à l'augmenter par la suite, avec les prochaines versions.
Bonne soirée,
Berka
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
berka -
posté le 25/08/2010 à 21:33:44. (493 messages postés) |

| Mack:
Je ne pense pas que ce soit possible, seulement à moins de réécrire la classe Window.
Après quelques recherches, j'ai trouvé le script:
Auteur: Selwyn
tu peux régler les marges:
self.margin = 16
puis empêcher l'affichage des flèches dans:
def contents=(bmp)
et
def update_arrows
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
| #==============================================================================
# ■ Window - Hidden RGSS Class
#------------------
# by Selwyn
#==============================================================================
#==============================================================================
# ■ Bitmap
#==============================================================================
class Bitmap
#--------------
# ● erase
#--------------
def erase(*args)
if args.size == 1
rect = args[0]
elsif args.size == 4
rect = Rect.new(*args)
end
fill_rect(rect, Color.new(0, 0, 0, 0))
end
end
#==============================================================================
# □ SG
#------------------
# Selwyn's Graphics module
#==============================================================================
module SG
#==============================================================================
# ■ SG::Skin
#==============================================================================
class Skin
#--------------
# ● instances settings
#--------------
attr_reader :margin
attr_accessor :bitmap
#--------------
# ● initialize
#--------------
def initialize
@bitmap = nil
@values = {}
@values['bg'] = Rect.new(0, 0, 128, 128)
@values['pause0'] = Rect.new(160, 64, 16, 16)
@values['pause1'] = Rect.new(176, 64, 16, 16)
@values['pause2'] = Rect.new(160, 80, 16, 16)
@values['pause3'] = Rect.new(176, 80, 16, 16)
@values['arrow_up'] = Rect.new(152, 16, 16, 8)
@values['arrow_down'] = Rect.new(152, 40, 16, 8)
@values['arrow_left'] = Rect.new(144, 24, 8, 16)
@values['arrow_right'] = Rect.new(168, 24, 8, 16)
self.margin = 16
end
#--------------
# ● width
#--------------
def margin=(width)
@margin = width
set_values
end
#--------------
# ● set_values
#--------------
def set_values
w = @margin
@values['ul_corner'] = Rect.new(128, 0, w, w)
@values['ur_corner'] = Rect.new(192-w, 0, w, w)
@values['dl_corner'] = Rect.new(128, 64-w, w, w)
@values['dr_corner'] = Rect.new(192-w, 64-w, w, w)
@values['up'] = Rect.new(128+w, 0, 64-2*w, w)
@values['down'] = Rect.new(128+w, 64-w, 64-2*w, w)
@values['left'] = Rect.new(128, w, w, 64-2*w)
@values['right'] = Rect.new(192-w, w, w, 64-2*w)
end
#--------------
# ● []
#--------------
def [](value)
return @values[value]
end
end
#==============================================================================
# ■ SG::Cursor_Rect
#==============================================================================
class Cursor_Rect < ::Sprite
#--------------
# ● instances settings
#--------------
attr_reader :height, :width, :skin, :margin
#--------------
# ● initialize
#--------------
def initialize(viewport)
super(viewport)
@width = 0
@height = 0
@skin = nil
@margin = 0
@rect = {}
@rect['cursor_up'] = Rect.new(129, 64, 30, 1)
@rect['cursor_down'] = Rect.new(129, 95, 30, 1)
@rect['cursor_left'] = Rect.new(128, 65, 1, 30)
@rect['cursor_right'] = Rect.new(159, 65, 1, 30)
@rect['upleft'] = Rect.new(128, 64, 1, 1)
@rect['upright'] = Rect.new(159, 64, 1, 1)
@rect['downleft'] = Rect.new(128, 95, 1, 1)
@rect['downright'] = Rect.new(159, 95, 1, 1)
@rect['bg'] = Rect.new(129, 65, 30, 30)
end
#--------------
# ● margin=
#--------------
def margin=(margin)
@margin = margin
set(x, y, width, height)
end
#--------------
# ● skin=
#--------------
def skin=(skin)
@skin = skin
draw_rect
end
#--------------
# ● width=
#--------------
def width=(width)
return if @width == width
@width = width
if @width == 0 and self.bitmap != nil
self.bitmap.dispose
self.bitmap = nil
end
draw_rect
end
#--------------
# ● height=
#--------------
def height=(height)
return if @height == height
@height = height
if @height == 0 and self.bitmap != nil
self.bitmap.dispose
self.bitmap = nil
end
draw_rect
end
#--------------
# ● set
#--------------
def set(x, y, width, height)
self.x = x + @margin
self.y = y + @margin
if @width != width or @height != height
@width = width
@height = height
if width > 0 and height > 0
draw_rect
end
end
end
#--------------
# ● empty
#--------------
def empty
self.x = 0
self.y = 0
self.width = 0
self.height = 0
end
#--------------
# ● draw_rect
#--------------
def draw_rect
return if @skin == nil
if @width > 0 and @height > 0
self.bitmap = Bitmap.new(@width, @height)
rect = Rect.new(1, 1, @width - 2, @height - 2)
self.bitmap.stretch_blt(rect, @skin, @rect['bg'])
self.bitmap.blt(0, 0, @skin, @rect['upleft'])
self.bitmap.blt(@width-1, 0, @skin, @rect['upright'])
self.bitmap.blt(0, @height-1, @skin, @rect['downright'])
self.bitmap.blt(@width-1, @height-1, @skin, @rect['downleft'])
rect = Rect.new(1, 0, @width - 2, 1)
self.bitmap.stretch_blt(rect, @skin, @rect['cursor_up'])
rect = Rect.new(0, 1, 1, @height - 2)
self.bitmap.stretch_blt(rect, @skin, @rect['cursor_left'])
rect = Rect.new(1, @height-1, @width - 2, 1)
self.bitmap.stretch_blt(rect, @skin, @rect['cursor_down'])
rect = Rect.new(@width - 1, 1, 1, @height - 2)
self.bitmap.stretch_blt(rect, @skin, @rect['cursor_right'])
end
end
end
#==============================================================================
# ■ SG::Window
#------------------
#
#==============================================================================
class Window
#--------------
# ● set instances variables
#--------------
attr_reader(:x, :y, :z, :width, :height, :ox, :oy, :opacity, :back_opacity,
:stretch, :contents_opacity, :visible, :pause)
attr_accessor :active
#--------------
# ● initialize
#--------------
def initialize()
@skin = Skin.new
@viewport = Viewport.new(0, 0, 0, 0)
@cr_vport = Viewport.new(0, 0, 0, 0)
@width = 0
@height = 0
@ox = 0
@oy = 0
@opacity = 255
@back_opacity = 255
@contents_opacity = 255
@frame = Sprite.new()
@bg = Sprite.new()
@window = Sprite.new(@viewport)
@pause_s = Sprite.new()
@arrows = []
for i in 0...4
@arrows.push(Sprite.new(@cr_vport))
@arrows[i].bitmap = Bitmap.new(16, 16)
@arrows[i].visible = false
end
@cursor_rect = Cursor_Rect.new(@cr_vport)
@cursor_rect.margin = @skin.margin
@cursor_fade = true
@pause_s.visible = false
@pause = false
@active = true
@stretch = true
@visible = true
self.x = 0
self.y = 0
self.z = 100
self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
end
#--------------
# ● contents=
#--------------
def contents=(bmp)
@window.bitmap = bmp
if bmp != nil
if bmp.width > @viewport.rect.width
bmp.height > @viewport.rect.height
draw_arrows
end
end
end
#--------------
# ● contents
#--------------
def contents
return @window.bitmap
end
#--------------
# ● dispose
#--------------
def dispose
@bg.dispose
@frame.dispose
@window.dispose
@cursor_rect.dispose
@viewport.dispose
@pause_s.dispose
@cr_vport.dispose
for arrow in @arrows
arrow.dispose
end
end
#--------------
# ● update
#--------------
def update
@window.update
@cursor_rect.update
@viewport.update
@cr_vport.update
@pause_s.src_rect = @skin["pause#{(Graphics.frame_count / 8) % 4}"]
@pause_s.update
update_visible
update_arrows
if @cursor_fade
@cursor_rect.opacity -= 10
@cursor_fade = false if @cursor_rect.opacity <= 100
else
@cursor_rect.opacity += 10
@cursor_fade = true if @cursor_rect.opacity >= 255
end
end
#--------------
# ● update_visible
#--------------
def update_visible
@frame.visible = @visible
@bg.visible = @visible
@window.visible = @visible
@cursor_rect.visible = @visible
if @pause
@pause_s.visible = @visible
else
@pause_s.visible = false
end
end
#--------------
# ● pause=
#--------------
def pause=(pause)
@pause = pause
update_visible
end
#--------------
# ● update_arrows
#--------------
def update_arrows
if @window.bitmap == nil or @visible == false
for arrow in @arrows
arrow.visible = false
end
else
@arrows[0].visible = @oy > 0
@arrows[1].visible = @ox > 0
@arrows[2].visible = (@window.bitmap.width - @ox) > @viewport.rect.width
@arrows[3].visible = (@window.bitmap.height - @oy) > @viewport.rect.height
end
end
#--------------
# ● visible=
#--------------
def visible=(visible)
@visible = visible
update_visible
update_arrows
end
#--------------
# ● x=
#--------------
def x=(x)
@x = x
@bg.x = x + 2
@frame.x = x
@viewport.rect.x = x + @skin.margin
@cr_vport.rect.x = x
@pause_s.x = x + (@width / 2) - 8
set_arrows
end
#--------------
# ● y=
#--------------
def y=(y)
@y = y
@bg.y = y + 2
@frame.y = y
@viewport.rect.y = y + @skin.margin
@cr_vport.rect.y = y
@pause_s.y = y + @height - @skin.margin
set_arrows
end
#--------------
# ● z=
#--------------
def z=(z)
@z = z
@bg.z = z
@frame.z = z + 1
@cr_vport.z = z + 2
@viewport.z = z + 3
@pause_s.z = z + 4
end
#--------------
# ● ox=
#--------------
def ox=(ox)
return if @ox == ox
@ox = ox
@viewport.ox = ox
update_arrows
end
#--------------
# ● oy=
#--------------
def oy=(oy)
return if @oy == oy
@oy = oy
@viewport.oy = oy
update_arrows
end
#--------------
# ● width=
#--------------
def width=(width)
@width = width
@viewport.rect.width = width - @skin.margin * 2
@cr_vport.rect.width = width
if @width > 0 and @height > 0
@frame.bitmap = Bitmap.new(@width, @height)
@bg.bitmap = Bitmap.new(@width - 4, @height - 4)
draw_window
end
self.x = @x
self.y = @y
end
#--------------
# ● height=
#--------------
def height=(height)
@height = height
@viewport.rect.height = height - @skin.margin * 2
@cr_vport.rect.height = height
if @height > 0 and @width > 0
@frame.bitmap = Bitmap.new(@width, @height)
@bg.bitmap = Bitmap.new(@width - 4, @height - 4)
draw_window
end
self.x = @x
self.y = @y
end
#--------------
# ● opacity=
#--------------
def opacity=(opacity)
value = [[opacity, 255].min, 0].max
@opacity = value
@contents_opacity = value
@back_opacity = value
@frame.opacity = value
@bg.opacity = value
@window.opacity = value
end
#--------------
# ● back_opacity=
#--------------
def back_opacity=(opacity)
value = [[opacity, 255].min, 0].max
@back_opacity = value
@bg.opacity = value
end
#--------------
# ● contents_opacity=
#--------------
def contents_opacity=(opacity)
value = [[opacity, 255].min, 0].max
@contents_opacity = value
@window.opacity = value
end
#--------------
# ● cursor_rect
#--------------
def cursor_rect
return @cursor_rect
end
#--------------
# ● cursor_rect=
#--------------
def cursor_rect=(rect)
@cursor_rect.x = rect.x
@cursor_rect.y = rect.y
if @cursor_rect.width != rect.width or @cursor_rect.height != rect.height
@cursor_rect.set(@cursor_rect.x, @cursor_rect.y, rect.width, rect.height)
end
end
#--------------
# ● windowskin
#--------------
def windowskin
return @skin.bitmap
end
#--------------
# ● windowskin=
#--------------
def windowskin=(windowskin)
return if windowskin == nil
if @skin.bitmap != windowskin
@pause_s.bitmap = windowskin
@pause_s.src_rect = @skin['pause0']
@skin.bitmap = windowskin
@cursor_rect.skin = windowskin
draw_window
draw_arrows
end
end
#--------------
# ● margin=
#--------------
def margin=(margin)
if @skin.margin != margin
@skin.margin = margin
self.x = @x
self.y = @y
temp = @height
self.height = 0
self.width = @width
self.height = temp
@cursor_rect.margin = margin
set_arrows
end
end
#--------------
# ● stretch=
#--------------
def stretch=(bool)
if @stretch != bool
@stretch = bool
draw_window
end
end
#--------------
# ● set_arrows
#--------------
def set_arrows
@arrows[0].x = @width / 2 - 8
@arrows[0].y = 8
@arrows[1].x = 8
@arrows[1].y = @height / 2 - 8
@arrows[2].x = @width - 16
@arrows[2].y = @height / 2 - 8
@arrows[3].x = @width / 2 - 8
@arrows[3].y = @height - 16
end
#--------------
# ● draw_arrows
#--------------
def draw_arrows
return if @skin.bitmap == nil
@arrows[0].bitmap.blt(0, 0, @skin.bitmap, @skin['arrow_up'])
@arrows[1].bitmap.blt(0, 0, @skin.bitmap, @skin['arrow_left'])
@arrows[2].bitmap.blt(0, 0, @skin.bitmap, @skin['arrow_right'])
@arrows[3].bitmap.blt(0, 0, @skin.bitmap, @skin['arrow_down'])
update_arrows
end
#--------------
# ● draw_window
#--------------
def draw_window
return if @skin.bitmap == nil
return if @width == 0 or @height == 0
m = @skin.margin
if @frame.bitmap.nil?
@frame.bitmap = Bitmap.new(@width, @height)
@bg.bitmap = Bitmap.new(@width - 4, @height - 4)
end
@frame.bitmap.clear
@bg.bitmap.clear
if @stretch
dest_rect = Rect.new(0, 0, @width-4, @height-4)
@bg.bitmap.stretch_blt(dest_rect, @skin.bitmap, @skin['bg'])
else
bgw = Integer((@width-4) / 128) + 1
bgh = Integer((@height-4) / 128) + 1
for x in 0..bgw
for y in 0..bgh
@bg.bitmap.blt(x * 128, y * 128, @skin.bitmap, @skin['bg'])
end
end
end
bx = Integer((@width - m*2) / @skin['up'].width) + 1
by = Integer((@height - m*2) / @skin['left'].height) + 1
for x in 0..bx
w = @skin['up'].width
@frame.bitmap.blt(x * w + m, 0, @skin.bitmap, @skin['up'])
@frame.bitmap.blt(x * w + m, @height - m, @skin.bitmap, @skin['down'])
end
for y in 0..by
h = @skin['left'].height
@frame.bitmap.blt(0, y * h + m, @skin.bitmap, @skin['left'])
@frame.bitmap.blt(@width - m, y * h + m, @skin.bitmap, @skin['right'])
end
@frame.bitmap.erase(@width - m, 0, m, m)
@frame.bitmap.erase(0, @height - m, m, m)
@frame.bitmap.erase(@width - m, @height - m, m, m)
@frame.bitmap.blt(0, 0, @skin.bitmap, @skin['ul_corner'])
@frame.bitmap.blt(@width - m, 0, @skin.bitmap, @skin['ur_corner'])
@frame.bitmap.blt(0, @height - m, @skin.bitmap, @skin['dl_corner'])
@frame.bitmap.blt(@width - m, @height - m, @skin.bitmap, @skin['dr_corner'])
end
end
end |
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
berka -
posté le 22/08/2010 à 20:09:09. (493 messages postés) |

| Bonsoir,
Le probleme c'est que Bitmap ne dispose pas d'attribut Tone.
Seuls Plane, Sprite et Viewport en ont. il faudrait donc faire :
Sprite.tone.set(r,g,b,a)
Ce qui se passe aussi en l'occurrence, c'est que ton $game_map.events[id]
n'est pas du tout un sprite, mais un objet Game_Event, qui hérite de Game_Character. Donc c'est de la "donnée", pas du graphisme. Pas étonnant, car les scripts sont identifiables par leur nom:
Données: Game_xxx / Scene_xxx
Graphiques: Sprite_xxx / Spriteset / Window_xxx
Donc pour oser modifier ton charset, il faut que tu te tournes vers Sprite_Character
Ou bien que tu passes indirectement par la propriété character_hue de Game_Character, donc par $game_map.events[id].character_hue.
Mais c'est très fortement limité...
Mais si tu veux modifier tous les sprites d'évents, le plus simple est de te tourner vers Spriteset_Map, mettre le tableau @character_sprites en attribut rw. Il suffira d'une simple boucle pour égir sur chacun des sprites d'event qu'il contient.
Bonne soirée,
Berka
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Support Mysql |
berka -
posté le 07/07/2010 à 00:53:58. (493 messages postés) |

| Je ne sais pas, un sorte de flemme.
C'est vrai que c'est extrêmement gourmand.
On peut utiliser les Apis comme cela, d'ailleurs je suis tombé récemment et par hasard sur de droles de choses dans la ram... des trucs vraiment bizarres et pas du tout protégées.
Là je suis en train de me créer un petit orpg via apis. Ca rame un peu, mais c'est optimisable... c'est vraiment très cool à coder en tout cas.
J'hésite à me compiler une dll avec un binding ruby. Ce sera indubitablement plus rapide, mais beaucoup moins fun niveau code ruby. Exit tous les accès Ram...
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Support Mysql |
berka -
posté le 29/05/2010 à 03:22:37. (493 messages postés) |

| Pour le fetch, je me suis inspiré de la doc PHP, mais je vas revérifier demain. J'ai peut etre mal lu.
Pour close, j'ai vu cela, j'ai réglé le tout dans une nouvelle version.
Il ne fonctionne pas pour XP, parce que XP ne reconnait pas les inclusions de modules.
Pour les mysql_select_db, je vais la rajouter.
Pour to_ruby, cela permet de converter les chaines renvoyées par get_rows en objets ruby. Plus pratique.
List_tables chez moi fonctionne.
Quand à la classe Mysql, pourquoi pas.
Merci du rapport
EDIT:
Nouvelle version:
C'est en angliche, mais c'est plus pratique vu que je le poste à plusieurs endroits différents.
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
| #======================================================================
# Net::Mysql
# 29-05-2010 www.rpgmakervx-fr.com Rgss1&2 v.1
# par berka
#--------------------------------------------------------------------------------------------------------------
# This script is free to use. Do not post anywhere without my permission. Credits needed.
#--------------------------------------------------------------------------------------------------------------
# Warning: if your game is cracked and decrypted, your mysql login will be available !
# Do not use with a database containing personal information.
# Your mysql host should accept external connections.
# Check with it for remote SSH access to your database.
#--------------------------------------------------------------------------------------------------------------
# This script allows interractions with a mysql database directly in the game
# It requires a file "libmysql.dll" in the game folder
#--------------------------------------------------------------------------------------------------------------
# Attention: en cas de décryptage de votre jeu, vos identifiants mysql seront accessibles !
# Ne pas utiliser de base de donnée contenant des informations personnelles.
# Votre hébergeur Mysql doit accepter les connexions mysql externes.
# Vérifiez auprès de lui que vous avec un accès distant SSH à votre base de données.
#--------------------------------------------------------------------------------------------------------------------------
# Ce script permet d'interragir avec une base de données mysql directement via le jeu.
# Il nécessite un fichier "libmysql.dll" à placer dans le dossier du jeu.
#--------------------------------------------------------------------------------------------------------------------------
# ● md5() support
# ● Mysql functions:
# - Net::Mysql.new([host,user,pass,base,port]) : return : mysql connection handle
# - @mysql.close : return : bool
# - @mysql.list_tables([filter]) : return : ["table1", "table2"]
# - @mysql.select_db(base_name) : return : true if the db exists or false
# - @mysql.query("query",ret=false) : return : if ret = true : rows else result handle
# - @mysql.get_fields([handle result]) : return : ["field1", "field2"]
# - @mysql.get_rows([handle result]) : return : [["l1 row1", "l1 row2"], ["l2 row1", "l2 row2"]]
# - @mysql.fetch_assoc : return : {"field" => ["row1", "row2"] }
# - @mysql.num_rows([handle result]) : return : integer
# ● Html functions:
# - "string".to_ruby : return : true, false, nil, Integer, Float, self, etc.
# - "<berka>".htmlspecialchars : return : "&lr;berka>"
# - "<berka>".urlencode : return : "%3Cberka%3E"
# - "%3Cberka%3E".urldecode : return : "<berka>"
#--------------------------------------------------------------------------------------------------------------------------
# SQL queries samples
# ● "SELECT * FROM table"
# ● "INSERT INTO table (fields) VALUES (values)"
# ● "INSERT INTO table SET field = value WHERE field = value"
# ● "UPDATE table SET field = value WHERE field = value"
#--------------------------------------------------------------------------------------------------------------------------
# Sample :
# @mysql = Net::Mysql.new
# @mysql.query("SELECT * FROM `members`)
# res = @mysql.fetch_assoc
# => {:id=>["1","2"], :nom=>["berka","rgss"], :age=>["19",""]}
#======================================================================
module Berka
module Mysql
Host = "127.0.0.1" # mysql server(local : 127.0.0.1)
User = "" # mysql user
Pass = "" # mysql password
Base = "rgss" # base name
Port = 3306 # server port (default: 3306)
Err_Con = "Mysql:\nUnable to connect to the database"
Err_Req = "Mysql:\nUnable to send the query"
end
module Html
Spec_Char=["$","&","+",",","/",";",":","=","@","?"," ","<",">","#","%","{","}","|","\\","^","~","[","]","`"]
end
end
class Numeric
RMM=Win32API.new("kernel32", "RtlMoveMemory", "ppl", "")
def copymem(len)
# move memory to convert c structs to ruby objects
RMM.call(buf="\0"*len,self,len);buf
end
end
class String
def to_ruby
# detect if the string is a md5 hash
return self if self=~/^[a-f0-9]{32}$/
# converts syntax of a string to ruby controls
eval(self)rescue self
end
def htmlspecialchars
# converts special chars to html compatibles chars (ASCII)
{"&"=>"&",'"'=>""","'"=>"'","<"=>"&lr;",">"=>">"}.each_pair{|k,v|self.gsub!(k,v)}
self
end
def urlencode
# converts special char of url
o="";self.scan(/./).each{|c|c="%"+c.unpack('H*')[0]if Berka::Html::Spec_Char.include?(c);o<<c};o
end
def urldecode
# converts encoded special char of url to normal chars
self.gsub!(/\%(\w\w)/){|c|c.gsub!("%","").hex.chr}
end
end
module Net
class Mysql
MI=Win32API.new("libmysql.dll","mysql_init","l","l")
MC=Win32API.new("libmysql.dll","mysql_close","l","l")
MQ=Win32API.new("libmysql.dll","mysql_query","lp","l")
MLT=Win32API.new("libmysql.dll","mysql_list_tables","lp","l")
MFL=Win32API.new("libmysql.dll","mysql_fetch_lengths","p","l")
MFR=Win32API.new("libmysql.dll","mysql_fetch_row","p","l")
MNF=Win32API.new("libmysql.dll","mysql_num_fields","p","l")
MFC=Win32API.new("libmysql.dll","mysql_field_count","p","l")
MSR=Win32API.new("libmysql.dll","mysql_store_result","l","l")
MRC=Win32API.new("libmysql.dll","mysql_real_connect","lpppplpl","l")
MNR=Win32API.new("libmysql.dll","mysql_num_rows","p","l")
MFFD=Win32API.new("libmysql.dll","mysql_fetch_field_direct","pi","l")
MFRE=Win32API.new("libmysql.dll","mysql_free_result","p","l")
MSDB=Win32API.new("libmysql.dll","mysql_select_db","p","l")
attr_reader :handle
def initialize(h=Berka::Mysql::Host,u=Berka::Mysql::User,p=Berka::Mysql::Pass,b=Berka::Mysql::Base,po=Berka::Mysql::Port)
# @handle : handle of mysql initialization
@handle=MI.call(0)
# establishes the mysql connection
(print(Berka::Mysql::Err_Con))if MRC.call(@handle,h,u,p,b,po,nil,0)==0
# returns: handle
@handle
end
def close
# closes the current connection
MC.call(@handle)
end
def select_db(base)
# selects a current database
MSDB.call(base)==true
end
def list_tables(m="")
# lists tables request -> fetch the result -> to ruby string
l=MFR.call(MLT.call(@my,m)).copymem(1024)
# splits the string to array -> list of tables
l.scan(/\t(\w+)\0/).flatten
end
def query(req,ret=false)
# sends the query (msg error)
(return print(Berka::Mysql::Err_Req+req))if !MQ.call(@handle,req)
# previous results are released
MFRE.call(@result)if @result
# gets the results from the query -> c struct handle
@result=MSR.call(@handle)
ret ? get_rows(@result) : @result
end
# Proc: gets the name of the field (cstruct) -> to ruby string of handles -> to ruby string
# returns the fieldname or nil if the field is not found.
ReadField=Proc.new{|r,i,of|MFFD.call(r,i).copymem(1024).unpack("iissi")[0].copymem(of).delete!("\0")}
def get_fields(res=nil)
# if a result handle is provided
r=res.nil? ? @result : res
# gets the number of fields, offset: 8bytes-2 (cf. loop)
nf,ch,of=MFC.call(@handle),[],6
# each field: if the fieldname is not found: increase the offset of bytes.
nf.times{|i|a=ReadField.call(r,i,of+=2)until a
# add to the fields array
ch<<a
# reinitialize the offset for the next iteration
of=6}
# returns an array of fields
ch
end
def get_rows(res=nil)
# if a result handle is provided
r=res.nil? ? @result : res
# nr: number of rows, nf: number of fields
nr,nf,en=MNR.call(r),MNF.call(r),[]
# each row:
nr.times{|i|
# gets each row: c struct -> to ruby string -> to array (handles)
c=MFR.call(r).copymem(4).unpack("i")[0]
# gets each field length: c struct -> to ruby string -> to array (handles)
tf=MFL.call(r).copymem(4*nf).unpack("i*")
# size of field: offset of each field
sf=tf.inject(0){|n,i|n+i}
# handle of row -> to string (offset) -> to array
en<<c.copymem(sf+nf).split("\0")
}
# returns each row as an array
en
end
def num_rows(res=nil)
# if a result handle is provided
r=res.nil? ? @result : res
# returns: number of rows
MNR.call(r)
end
def fetch_assoc(to_ruby=false)
# gets rows and fields
h,f,r={},get_fields,get_rows
# each field: read the rows and store them to an hash : h[:field]=[rows]
# rows are converted to ruby objects if to_ruby == true
f.each_with_index{|fi,i|t=[];r.each{|l|t<<l[i]};h[fi.to_sym]=(to_ruby ? t.map!{|o|o.to_ruby if o} : t)}
h
end
end
end |
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Support Mysql |
berka -
posté le 23/05/2010 à 21:30:47. (493 messages postés) |

| Non monos, les fonctions de requetes (SELECT, UPDATE, INSERT) sont parfaitement gérées.
Ce que je voulais c'était des fonctions de l'API mysql.
Edit: ok Nuki: je vois ca
Re-edit: Je viens de voir que le forum convertit automatiquement les caractères html. Dans le script, à la def htmlspecialchars, il faut que vous enleviez les * avant d'utiliser le script.
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Support Mysql |
berka -
posté le 23/05/2010 à 18:07:41. (493 messages postés) |

| oui, merci de préciser cela.
Il est évident que la protection de votre jeu est complètement naze. Il est possible d'extraire tous les scripts de votre jeu en une seule commande, très facilement.
Après, il faut être logique: ne pas utiliser de base de données personnelle. Votre base, voire votre serveur ne doit contenir que des données de jeu. Rien d'autre. Faites attention à ce que vous mettez dans votre base.
Théoriquement, les serveurs ftp et mysql sont indépendants, mais la plupart des hébergeurs web utilisent les memes identifiants de connexion.
Nouvelle idée de script... Un algorithme de cryptage plus sécurisé pour RM...
Edit: Vous avez des idées de fonctions mysql non présentes dans le script ? J'ai épluché la doc mais aucune autre fonction ne m'a semblé utile.
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Support Mysql |
berka -
posté le 23/05/2010 à 17:26:40. (493 messages postés) |

| Il manque une partie du script: le voici en entier:
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
| #======================================================================
# Net::Mysql
# 22-05-2010 www.rpgmakervx-fr.com Rgss2 v0.1
# par berka
#--------------------------------------------------------------------------------------------------------------
# Ce script est libre d'utilisation. Ne pas poster sans accord de l'auteur. Crédits requis.
#--------------------------------------------------------------------------------------------------------------
# Attention: en cas de décryptage de votre jeu, vos identifiants mysql seront accessibles !
# Ne pas utiliser de base de donnée contenant des informations personnelles.
#
# Votre hébergeur Mysql doit accepter les connexions mysql externes.
# Vérifiez auprès de lui que vous avec un accès distant SSH à votre base de données.
#--------------------------------------------------------------------------------------------------------------
# Ce script permet d'interragir avec une base de données mysql directement via le jeu.
# Il nécessite un fichier "libmysql.dll" à placer dans le dossier du jeu.
# # ATTENTION ! Il faut enlever les * avant l'utilisation dans la def htmlspecialchars.
#Le forum convertit automatiquement les caractères.
#--------------------------------------------------------------------------------------------------------------
# ● fonctions Mysql :
# - Net::Mysql.connect : return : mysql connection handle
# - Net::Mysql.close : return : bool
# - Net::Mysql.query("query") : return : query result handle
# - Net::Mysql.get_fields([handle result]) : return : ["field1", "field2"]
# - Net::Mysql.get_rows([handle result]) : return : [["l1 row1", "l1 row2"], ["l2 row1", "l2 row2"]]
# - Net::Mysql.fetch_assoc : return : {"field" => ["row1", "row2"] }
# - Net::Mysql.list_tables([filtre]) : return : ["table1", "table2"]
#
# ● fonctions Html:
# - "string".to_ruby : return : true, false, nil, Integer, Float, self
# - "<berka>".htmlspecialchars : return : "&lr;berka>"
# - "<berka>".urlencode : return : "%3Cberka%3E"
# - "%3Cberka%3E".urldecode : return : "<berka>"
#--------------------------------------------------------------------------------------------------------------
# Exemples de requetes SQL
# ● "SELECT * FROM `table`"
# ● "INSERT INTO `table` (champs) VALUES (valeurs)"
# ● "INSERT INTO `table` SET champ = valeur WHERE champ = valeur"
# ● "UPDATE `table` SET champ = valeur WHERE champ = valeur"
#--------------------------------------------------------------------------------------------------------------
# Exemple d'utilisation:
# Net::Mysql.connect
# Net::Mysql.query("SELECT * FROM `membres`)
# res = Net::Mysql.fetch_assoc
# => {"id"=>["1","2"], "nom"=>["berka","rgss"], "age"=>["19",""]}
#======================================================================
module Berka
module Mysql
Host ="127.0.0.1" # serveur mysql (local : 127.0.01)
User ="root" # utilisateur mysql
Pass ="" # mot de passe mysql
Base ="test" # nom de la base
Port =3306 # port du serveur (par défaut: 3306)
Err_Con = "Mysql:\nImpossible de se connecter à la base"
Err_Req = "Mysql:\nLa requete n'a pu être envoyée."
end
module Html
Spec_Char=["$","&","+",",","/",";",":","=","@","?"," ","<",">","#","%","{","}","|","\\","^","~","[","]","`"]
end
end
class Numeric
def copymem(len)
Win32API.new("kernel32", "RtlMoveMemory", "ppl", "").call(buf="\0"*len,self,len);buf
end
end
class String
include Berka::Html
def to_ruby
eval(self) rescue self
end
# ATTENTION ! Il faut enlever les * avant l'utilisation. Le forum convertit automatiquement les caractères.
def htmlspecialchars
{"&"=>"&*#38;",'"'=>"&*#34;","'"=>"&*#39;","<"=>"&*#60;",">"=>"&*#62;"}.each_pair{|k,v|self.gsub!(k,v)}
self
end
def urlencode
o="";self.scan(/./).each{|c|c="%"+c.unpack('H*')[0]if Spec_Char.include?(c);o<<c};o
end
def urldecode
self.gsub!(/\%(\w\w)/){|c|c.gsub!("%","").hex.chr}
end
end
module Net
module Mysql
MI=Win32API.new("libmysql.dll","mysql_init","l","l")
MRC=Win32API.new("libmysql.dll","mysql_real_connect","lpppplpl","l")
MLT=Win32API.new("libmysql.dll","mysql_list_tables","lp","l")
MFR=Win32API.new("libmysql.dll","mysql_fetch_row","p","l")
MC=Win32API.new("libmysql.dll","mysql_close","","l")
MQ=Win32API.new("libmysql.dll","mysql_query","lp","l")
MSR=Win32API.new("libmysql.dll","mysql_store_result","l","l")
MFL=Win32API.new("libmysql.dll","mysql_fetch_lengths","p","l")
MNF=Win32API.new("libmysql.dll","mysql_num_fields","p","l")
MNR=Win32API.new("libmysql.dll","mysql_num_rows","p","l")
MFFD=Win32API.new("libmysql.dll","mysql_fetch_field_direct","pi","l")
MFF=Win32API.new("libmysql.dll","mysql_fetch_field","p","l")
MFRE=Win32API.new("libmysql.dll","mysql_free_result","p","l")
MFC=Win32API.new("libmysql.dll","mysql_field_count","p","l")
module_function
include Berka::Mysql
def connect
@my=MI.call(0)
(print(Err_Con)) if MRC.call(@my,Host,User,Pass,Base,Port,nil,0)==0
@my
end
def close
MC.call(@my)
end
def list_tables(m="")
l=MFR.call(MLT.call(@my,m)).copymem(1024)
l.scan(/\t(\w+)\0/).flatten
end
def query(req)
(return print(Err_Req))if !MQ.call(@my,req)
MFRE.call(@result)if @result
@result=MSR.call(@my)
end
def get_fields(res=nil)
r=res.nil? ? @result : res
nf,ch=MFC.call(@my),[]
nf.times{|i|ch<<MFFD.call(r,i).copymem(256).unpack("iissi")[0].copymem(8).delete!("\0")}
ch
end
def get_rows(res=nil)
r=res.nil? ? @result : res
nr,nf,en=MNR.call(r),MNF.call(r),[]
return nil if nf==0||nr==0
nr.times{|i|
c=MFR.call(r).copymem(4).unpack("i")[0]
tf=MFL.call(r).copymem(4*nf).unpack("i*")
sf=tf.inject(0){|n,i|n+i}
en<<c.copymem(sf+nf).split("\0")
}
en
end
def fetch_assoc
h,f,r={},get_fields,get_rows
f.each_with_index{|fi,i|t=[];r.each{|l|t<<l[i]};h[fi]=t}
h
end
end
end
|
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Forum - Lectures |
berka -
posté le 09/04/2010 à 00:29:18. (493 messages postés) |

| Tu lis deux fois le meme livre ? Risibles Amours
Sinon, Kafka: +1
Les derniers livres que j'ai lu, ces deux derniers mois :
Le Procès: F. Kafka
Hygiène de l'Assassion: A. Nothomb
Cosmétique de l'ennemi: A. Nothomb
La Clinique du Doc. H: M. Higgins Clark
La Guerre sans Haine : E. Rommel
Prochain livre:
Les Mains du miracle : J. Kessel
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Tutoriels - Les conditions en Ruby |
berka -
posté le 31/01/2010 à 16:39:34. (493 messages postés) |

| Le "then" est très rarement utilisé en ruby. Il vaut meme mieux ne pas l'utilise car il est source de pas mal d'erreur pour des expressions sur plusieurs lignes.
Mais il est assez utile dans les comparaisons multiples:
1
2
3
4
5
6
7
8
| case note
when 0 then puts "Tout est à refaire !"
when 1 .. 6 then puts "Pas terrible !"
when 7,8,9 then puts "Ce n'est pas encore la moyenne, mais perséverez !"
when 10 then puts "Pile la moyenne ! Ouf !"
when 11,12,13 then #...
else then puts "Note incorrecte !"
end |
Ca fait des lignes en moins.
Il faut noter que l'on peut supprimer true, false voire nil dans certains cas:
est la meme chose que
est la meme chose que
est la meme chose que
Après, si on est exigeant, la différence entre and et &&, entre or et ||.
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Forum - Geex - Projet |
berka -
posté le 21/01/2010 à 13:37:33. (493 messages postés) |

| Vous n'arrivez pas faire un binding ruby en C# ?
Je crois qu'il existe un interpréteur Ruby.net (ironruby), donc compatible avec le c#. Ca risque de vous faciliter grandement l'implémentation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| var systeme = IronRuby.Ruby.CreateEngine();
systeme.Execute(@"
# définition d'un objet
class Ma_Class
def initialize()
puts 'test'
end
end
");
// Binding objets ruby
object testClasse = systeme.Runtime.Globals.GetVariable("Ma_Classe");
object test_ruby = systeme.ObjectOperations.CreateInstance(testClasse);
systeme.ObjectOperations.InvokeMember(test_ruby, "initialize"); |
Bonne continuation,
Berka
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Pack Formulaire V1.00 : Niveau avancé en scripting |
berka -
posté le 12/01/2010 à 11:24:18. (493 messages postés) |

| Nan, c'est pas une propriété de Mouse, mais une méthode du module Comparable de ruby (Mouse.x n'est rien d'autre qu'un objet Numeric. Or Numeric inclut Comparable)
Au niveau des valeur de retour des méthodes il faut savoir que:
1
2
3
4
| def test
a = 1
return a
end |
est la meme chose que
et que:
1
2
3
4
5
6
7
| def test
if a == 1
return true
else
return false
end
end |
est la meme chose que
1
2
3
| def test
a == 1
end |
Plus simple, nan ?
Généralement on peut enlever le return à la fin des méthodes. la dernière valeur est retournée automatiquement.
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Pack Formulaire V1.00 : Niveau avancé en scripting |
berka -
posté le 12/01/2010 à 10:25:33. (493 messages postés) |

| bonjour,
1
2
3
4
5
6
7
8
9
10
| def survole?
oki = false
if ((Mouse.x < (self.x + self.bitmap.width)) and (Mouse.x > self.x) ) then
if((Mouse.y < (self.y + self.bitmap.height)) and (Mouse.y > self.y) ) then
oki = true
end
end
return oki
end |
préfère la fonction between?, c'est plus propre. Cela réduit ta méthode à :
1
2
3
| def survole?
Mouse.x.between?(self.x, self.x + self.bitmap.width) && (Mouse.y.between?(self.y, self.y + self.bitmap.height)
end |
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Cinématique après quelque temps sur l'écran titre |
berka -
posté le 02/01/2010 à 12:40:03. (493 messages postés) |

| Voila une petite optimisation. Ca fait mal aux yeux ces conditions d'appui de touche. Si tu n'en es pas l'auteur, naturellement, tu lui as demandé son accord avant de publier son script.
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
| #**************************************************************
# Apres X frame sans que le joueur reagissent sur le title
# Une Map se lance
# Sur cette map si vous mettez un event en proccesus paralléle
# avec la fonction inserez un script puis vous ecrivez ceci :
# bouge_title
# Alors lorsque le joueur appuira sur les touches directionnel
# Il sera automatiquement rediriger vers l'ecran titre
# Fonctionnele normalement avec la totalité des custom title systeme
# Sauf celui pour passez le title
# N'oublier pas de mettre des transition pour plus de realisme ;)
#***************************************************************
#Par --Drow--
#***************************************************************
# Personnification ici modifiez par vos valeur
TEMPS = 1450 # apres combien de temps la map se lance
MAP_ID = 14 # ID de la map qui se lance apres attente
MAP_X = 10 # Position X du joueur lors de la teleportation
MAP_Y = 10 # Position Y du joueur lors de la teleportation
begin
end
class Scene_Title
alias modiff_main main
alias modiff_update update
def main
@ttemp = 0
modiff_main
end
def update
modiff_update
@ttemp += 1
if @ttemp >= TEMPS
Audio.bgm_stop
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_starting_members
$game_map.setup(MAP_ID)
$game_player.moveto(MAP_X, MAP_Y)
$game_player.refresh
$game_map.autoplay
$game_map.update
$scene = Scene_Map.new
end
end
end
module Input
def self.all_keys?
self.constants.each{|i|return true if Input.trigger?(eval(i))}
false
end
end
def bouge_title
$scene = Scene_Title.new if Input.all_keys?
end |
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Déplacement à la souris v2.0 |
berka -
posté le 02/01/2010 à 12:12:46. (493 messages postés) |

| Tiens les scripts sont coupés. Il en manque une grosse partie.
clavier:
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
| #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Gestion du Clavier
# par TLN et Lordrik, revu par Berka rgss2 (VX)
#--------------------------------------------------------------------------------------------------------------------------------------
# A placer au début de la liste de scripts, complètement. Ne pas utiliser deux scripts de clavier !
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
module Win32API::APIS
GAKS=Win32API.new("user32","GetAsyncKeyState",'i','i')
GKS=Win32API.new("user32","GetKeyState",'i','i')
KBDE=Win32API.new('user32','keybd_event','iii','')
end
include Win32API::APIS
module Input
class<<self
Inconnu="Cette touche est inconnue"
TAB_KEY={'clic gauche'=>1,'clic droit'=>2,'clic milieu'=>4,
'sm'=>4,'del'=>8,'tab'=>9,'enter'=>13,'shift'=>16,'ctrl'=>17,'alt'=>18,
'pause'=>19,'caps lock'=>20,'esc'=>27,'space'=>32,'pg up'=>33,'pg down'=>34,
'end'=>35,'home'=>36,'left'=>37,'up'=>38,'right'=>39,'down'=>40,'impr'=>44,
'insert'=>45,'suppr'=>46,'à'=>48,'&'=>49,'é'=>50,'"'=>51,"'"=>52,'('=>53,
'-'=>54,'è'=>55,'_'=>56,'ç'=>57,'a'=>65,'b'=>66,'c'=>67,'d'=>68,'e'=>69,
'f'=>70,'g'=>71,'h'=>72,'i'=>73,'j'=>74,'k'=>75,'l'=>76,'m'=>77,'n'=>78,
'o'=>79,'p'=>80,'q'=>81,'r'=>82,'s'=>83,'t'=>84,'u'=>85,'v'=>86,'w'=>87,
'x'=>88,'y'=>89,'z'=>90,'lwin'=>91,'rwin'=>92,'fn'=>93,'altgr'=>95,'0'=>96,
'1'=>97,'2'=>98,'3'=>99,'4'=>100,'5'=>101,'6'=>102,'7'=>103,'8'=>104,
'9'=>105,'n*'=>106,'+'=>107,'num'=>108,'n-'=>109,'.'=>110,'/'=>111,
'F1'=>112,'F2'=>113,'F3'=>114,'F4'=>115,'F5'=>116,'F6'=>117,'F7'=>118,
'F8'=>119,'F9'=>120,'F10'=>121,'F11'=>122,'F12'=>123,'vernum'=>144,
'verdefil'=>145,'lmaj'=>160,'rmaj'=>161,'lctrl'=>162,'rctrl'=>163,
'lalt'=>164,'ralt'=>165,'$'=>186,'='=>187,','=>188,';'=>190,':'=>191,
'ù'=>192,')'=>219,'*'=>220,'^'=>221,'²'=>222,'!'=>223,'<'=>226}
RS=TAB_KEY.clone
RS.keys.each{|k|RS[k]=[false,false,10]}
Dirs=['left','up','right','down']
alias :in_upd :update
alias :in_trig? :trigger? # Berka: Compatibilité avec touches initiales
alias :in_pres? :press?
alias :in_rep? :repeat?
def press?(n);n.is_a?(Integer)? in_pres?(n): RS[n][0];end
def trigger?(n);n.is_a?(Integer)? in_trig?(n): RS[n][1]==1;end
def dbtrigger?(n);RS[n][1]==2;end
def repeat?(n);n.is_a?(Integer) ? in_rep?(n) : (RS[k][2]%=4;RS[n][2]==0&&RS[n][0]);end
def hold?(n);((RS[n][2]%20)==0)&&RS[n][0];end
def release?(n);RS[k][1]==-1;end
def active?(n);GKS.call(TAB_KEY[k])&1==1;end
def update(*tab)
in_upd()
if !tab.empty?
tab.each{|n|m=RS[n][0];pr=GAKS.call(TAB_KEY[n])!=0
tr=m==pr ? 0 : (pr ?(RS[n][2].between?(1,9)? 2 : 1) : -1)
count=tr>0 ? 0 : [R[n][2]+1,20].min
RS[n]=[pr,tr,count]}
else
TAB_KEY.keys.each{|n|
m=RS[n][0];pr=GAKS.call(TAB_KEY[n])!=0
tr=m==pr ? 0 : (pr ?(RS[n][2].between?(1,9)? 2 : 1) : -1)
count=tr>0 ? 0 : [RS[n][2]+1,20].min
RS[n]=[pr,tr,count]}
end
end
end
end |
Souris
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
| #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Gestion de la Souris
# par Cybersam et Nearfantastica, revu par Berka rgss2 (VX)
#--------------------------------------------------------------------------------------------------------------------------------------
# A placer au début de la liste de scripts, juste après le script de Clavier
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
module Win32API::APIS
GPPS=Win32API.new('kernel32','GetPrivateProfileString','pppplp','l')
GCPr=Win32API.new('kernel32','GetCurrentProcess','','i')
FW=Win32API.new('user32','FindWindow','pp','i')
SPC=Win32API.new('kernel32','SetPriorityClass','pi','i')
STC=Win32API.new('user32','ScreenToClient','lp','i')
GTR=Win32API.new('user32','GetClientRect','lp','i')
GCP=Win32API.new('user32','GetCursorPos','p','i')
SC=Win32API.new('user32','ShowCursor','l','l')
module_function
def getini(s)
GPPS.call("Game",s,"",v="\0"*0xff,0xff,".//Game.ini")
v.delete!("\0")
end
Handle=FW.call("RGSS Player",getini("Title"))
SPC.call(GCPr.call,128)
end
include Win32API::APIS
class Souris
attr_accessor :x,:y,:curseur
def initialize
@t||={};@curseur=Sprite.new;@curseur.z=9999
show;update
end
def update
@x,@y=client(*pos_glob)
width,height=t_client
@x=0 if @x<0;@y=0 if @y<0
@x=width if x>width;@y=height if @y>height
[@x,@y]
end
def show(b=false);@curseur.visible=!b;SC.call(b ? 1 : 0);end
def in?(x,y,w,h);return false if @x.nil?||@y.nil?;@x.between?(x,x+w)&&@y.between?(y,y+h);end
def pos_glob;p=[0,0].pack('ll');(GCP.call(p)!=0)? p.unpack('ll'): nil;end
def client(x,y);return nil unless x&&y;p=[x,y].pack('ll');(STC.call(Handle,p)!=0)? p.unpack('ll'): nil;end
def t_client;GTR.call(Handle,r=([0]*4).pack('l4'));r.unpack('l4')[2..3];end
def grid;[(@x+$game_map.display_x/8)/32,(@y+$game_map.display_y/8)/32];end
def drag(t,obj,&block) # Berka
return if @t[t].alive? rescue nil
@t[t]=Thread.new{ox,oy=@x,@y
while Input.press?(t)
((nx=@x)-ox>0)?(x1=ox;x2=nx-x1):(x1=nx;x2=ox-x1)
((ny=@y)-oy>0)?(y1=oy;y2=ny-y1):(y1=ny;y2=oy-y1)
obj.x,obj.y,obj.width,obj.height=x1,y1,x2,y2
Graphics.update
yield
end
obj.visible=false}
end
def drag_orig(t,x,y) # Berka
@b_x||=@x-x;@b_y||=@y-y
(@x-@b_x>0)?(x2=@x-@b_x):(x2=-(@b_x-@x))
(@y-@b_y>0)?(y2=@y-@b_y):(y2=-(@b_y-@y))
[x2,y2]
end
def shcurseur(*c) # Berka
@curseur.bitmap=Cache.system(c.first)
@curseur.ox,@curseur.oy=*c[1..2]
rescue
@curseur.bitmap=Bitmap.new(24,24)
@curseur.bitmap.blt(0,0,Cache.system("Iconset"),Rect.new(24,0,24,24))
@curseur.ox,@curseur.oy=8,8
end
end
$souris||=Souris.new
module Graphics # Berka
class<<self
alias :cur_update :update unless $@
def update
($souris.curseur.x,$souris.curseur.y=*$souris.update)if $souris
cur_update
end
end
end |
Pathfinding
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
143
144
145
146
147
148
149
150
151
152
153
| #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Pathfinding
# par Modern Algebra rgss2 (VX)
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
class Game_System
attr_accessor :pathfinding_diagonal,:pathfinding_iterations
alias modalg_pathfinding_options_init_j5yt initialize
def initialize
modalg_pathfinding_options_init_j5yt
@pathfinding_diagonal,@pathfinding_iterations=false,0
end
end
class Game_Character
def find_path(trgt_x,trgt_y,diagonal=$game_system.pathfinding_diagonal,
max_iterations=$game_system.pathfinding_iterations)
path=$game_map.find_path(self.x,self.y,trgt_x,trgt_y,diagonal,
max_iterations,self)
@move_route.list.delete_at(@move_route_index)
path.each { |i| @move_route.list.insert(@move_route_index,i) }
@move_route_index-=1
end
def force_path(trgt_x,trgt_y,diagonal=$game_system.pathfinding_diagonal,
max_iterations=$game_system.pathfinding_iterations)
path=$game_map.find_path(self.x,self.y,trgt_x,trgt_y,diagonal,
max_iterations,self)
path.reverse!
path.push(RPG::MoveCommand.new(0))
move_route=RPG::MoveRoute.new
move_route.list,move_route.repeat=path,false
force_move_route(move_route)
end
end
class Game_Map
def removefrom_binaryheap
@open_nodes[1],v=@open_nodes[@listsize],1
@listsize-=1
loop do
w=2*(u=v)
if w+1<=@listsize
v=w if @total_cost[@open_nodes[u]]>=@total_cost[@open_nodes[w]]
v=w+1 if @total_cost[@open_nodes[v]]>=@total_cost[@open_nodes[w+1]]
elsif w<=@listsize
v=w if @total_cost[@open_nodes[u]]>=@total_cost[@open_nodes[w]]
end
if u==v;break;else
temp=@open_nodes[u]
@open_nodes[u]=@open_nodes[v]
@open_nodes[v]=temp
end
end
end
def find_path(src_x,src_y,trgt_x,trgt_y,diagonal,max_iterations,char)
path=[]
return path if !char.passable?(trgt_x,trgt_y)
max_elements=width*height+2
openx=Table.new(max_elements)
openy=Table.new(max_elements)
@open_nodes=Table.new(max_elements)
@total_cost=Table.new(max_elements)
heuristic=Table.new(max_elements)
step_cost=Table.new(width,height)
parent_x=Table.new(width,height)
parent_y=Table.new(width,height)
actual_list=Table.new(width,height)
new_openid,@open_nodes[1]=1,1
openx[1],openy[1]=src_x,src_y
dist=[(trgt_x-src_x).abs,(trgt_y-src_y).abs]
heuristic[1]=diagonal ? (dist.max*14)+(dist.min*10):(dist[0]+dist[1])*10
@total_cost[1]=heuristic[1]
actual_list[src_x,src_y]=1
@listsize,count=1,0
loop do
break if actual_list[trgt_x,trgt_y]!=0
count+=1
Graphics.update if count%500==0
return path if count==max_iterations
return path if @listsize==0
node=@open_nodes[1]
parent_xval,parent_yval=openx[node],openy[node]
actual_list[parent_xval,parent_yval]=2
removefrom_binaryheap
for i in 0...8
break if i>3&&!diagonal
x,y=case i
when 0 then [parent_xval,parent_yval-1] # UP
when 1 then [parent_xval,parent_yval+1] # DOWN
when 2 then [parent_xval-1,parent_yval] # LEFT
when 3 then [parent_xval+1,parent_yval] # RIGHT
when 4 then [parent_xval-1,parent_yval-1] # UP LEFT
when 5 then [parent_xval+1,parent_yval-1] # UP RIGHT
when 6 then [parent_xval-1,parent_yval+1] # DOWN LEFT
when 7 then [parent_xval+1,parent_yval+1] # DOWN RIGHT
end
next if actual_list[x,y] == 2
next unless char.passable?(x,y)
if i > 3
next unless case i
when 4 then char.passable?(x+1,y)||char.passable?(x,y+1)
when 5 then char.passable?(x-1,y)||char.passable?(x,y+1)
when 6 then char.passable?(x+1,y)||char.passable?(x,y-1)
when 7 then char.passable?(x-1,y)||char.passable?(x,y-1)
end
end
plus_step_cost=((x-parent_xval).abs+(y-parent_yval).abs)>1 ? 14 : 10
temp_step_cost=step_cost[parent_xval,parent_yval]+plus_step_cost
if actual_list[x,y]==1
if temp_step_cost<step_cost[x,y]
parent_x[x,y]=parent_xval
parent_y[x,y]=parent_yval
step_cost[x,y]=temp_step_cost
index=1
while index<@listsize;index+=1
break if openx[@open_nodes[index]]==x &&openy[@open_nodes[index]]==y
end
@total_cost[@open_nodes[index]]=temp_step_cost+heuristic[@open_nodes[index]]
else
next
end
else
new_openid+=1;@listsize+=1
@open_nodes[@listsize]=new_openid
step_cost[x,y]=temp_step_cost
d=[(trgt_x-x).abs,(trgt_y-y).abs]
heuristic[new_openid]=diagonal ? (d.max*14)+(d.min*10) : (d[0]+d[1])*10
@total_cost[new_openid]=temp_step_cost+heuristic[new_openid]
parent_x[x,y],parent_y[x,y]=parent_xval,parent_yval
openx[new_openid],openy[new_openid]=x,y
index,actual_list[x,y]=@listsize,1
end
while index!=1
temp_node=@open_nodes[index]
if @total_cost[temp_node]<=@total_cost[@open_nodes[index / 2]]
@open_nodes[index]=@open_nodes[index / 2]
index/=2;@open_nodes[index]=temp_node
else;break
end
end
end
end
path_x,path_y=trgt_x,trgt_y
while path_x!=src_x||path_y!=src_y
prnt_x,prnt_y=parent_x[path_x,path_y],parent_y[path_x,path_y]
if path_x<prnt_x;code=path_y<prnt_y ? 7 : path_y>prnt_y ? 5 : 2
elsif path_x>prnt_x ;code=path_y<prnt_y ? 8 : path_y>prnt_y ? 6 : 3
else ;code=path_y<prnt_y ? 4 : 1
end
path.push(RPG::MoveCommand.new(code))
path_x,path_y=prnt_x,prnt_y
end
return path
end
end |
Déplacement
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
| #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Déplacement à la souris II Reloaded
# par Berka 31/12/2009 rgss2 (VX)
#--------------------------------------------------------------------------------------------------------------------------------------
# Ne pas publier sans autorisation expresse. http://www.rpgmakervx-fr.com
#--------------------------------------------------------------------------------------------------------------------------------------
# Selection de personnages à la souris avec rectangle de sélection
# Déplacement par clic droit
# Scroll de la carte lorsque la souris est placée sur le bord de la fenetre
# Déplacement du héro si rien n'est sélectionné
#--------------------------------------------------------------------------------------------------------------------------------------
# Nécessite les scripts, normalement fournis avec ce script
# - Clavier : crédits à TLN et Lordrik (script amélioré, support des touches de jeu par berka)
# - Souris : crédits à Cybersam et Nearfantastica (ajout de la fonction drag&drop par berka)
# - Pathfinding : crédits à Modern Algebra (tiré de l'algo A* expliqué par M.Lester)
#--------------------------------------------------------------------------------------------------------------------------------------
# Tous les Réglages se font dans le présent script.
# Bien mettre le commentaire "mobile" dans chaque événement déplacable. Sinon ca ne marche pas !
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
module Berka
module Selection
T_Select = "clic gauche" # Touche de Sélection
T_Bouge = "clic droit" # Touche de déplacement (cf. script Clavier)
N_Curseur = "normal.png" # Image du Curseur, placée dans ./System (Icone par défaut)
Comment = "mobile" # Commentaire à ajouter aux events déplacables
C_Selbord = Color.new(0,255,0,180) # Couleur du bord du rectangle de selection
C_Selfond = Color.new(0,255,0,80) # Couleur du fonds du rectangle de sélection
TonSelect = Tone.new(0,255,0,20) # Couleur des events selectionnés
MargeScroll = 16 # Bordure de l'écran réactif au scroll
VitesseScroll = 7 # Vitesse du scroll de la carte
end
end
include Berka::Selection
$souris.shcurseur(N_Curseur,8,8)
$deplevents||={}
class Scene_Map<Scene_Base
alias :select_start :start
alias :select_update :update
alias :select_terminate :terminate
def start
@select,@events=Sprite_Select.new,[]
select_start
end
def update
select_update
return if !$souris
if Input.trigger?(T_Bouge)
x,y=$souris.grid[0],$souris.grid[1]
return $game_player.force_path(x,y)if @events.empty?
Thread.new{@events.each{|e|e.force_path(x,y) if e.is_a?(Game_Event)}}
sleep(0.01)
end
if Input.press?(T_Select)
clear
@select.visible=true
$souris.drag(T_Select,@select){@events=$deplevents.select{|e,c|@select.chk?(*c)}.flatten
@events.each{|e|e.selection=true if e.is_a?(Game_Event)}
@select.update}
return
end
chk_scroll
end
def clear
@events.each{|e|e.selection=false if e.is_a?(Game_Event)}
@events.clear
end
def terminate
@select.dispose
select_terminate
end
def chk_scroll
m=MargeScroll;x,y=$souris.update
i=2 if x.between?(0,544-m)&&y.between?(416-m,416)
i=4 if x.between?(0,m)&&y.between?(0,416-m)
i=6 if x.between?(544-m,544)&&y.between?(m,416)
i=8 if x.between?(m,544)&&y.between?(0,m)
$game_map.start_scroll(i,1,VitesseScroll)if i
end
end
class Sprite_Select<Sprite_Base
attr_writer :width,:height,:rect
def initialize
super
self.bitmap=Bitmap.new(544,416)
@width,@height=0,0
end
def update
super
self.bitmap.clear
self.bitmap.fill_rect(0,0,@width,@height,C_Selbord)
self.bitmap.fill_rect(1,1,@width-2,@height-2,C_Selfond)
end
def chk?(x,y)
x-=$game_map.display_x/8;y-=$game_map.display_y/8
x.between?(self.x,self.x+@width)&&y.between?(self.y,self.y+@height)
end
end
class Game_Character
alias :select_cinit :initialize
attr_accessor :tone
def initialize
@tone=Tone.new(0,0,0,0)
select_cinit
end
end
class Game_Event<Game_Character
alias :select_init :initialize
alias :select_upd :update
attr_accessor :selection
def initialize(*args)
select_init(*args)
@selection=false
for i in 0...@list.size;@bouge=true if @list[i].parameters[0]==Comment;end
end
def update
$deplevents[self]=[self.screen_x,self.screen_y]if @bouge
@tone=(@selection ? TonSelect : Tone.new(0,0,0,0))
select_upd
end
end
class Sprite_Character<Sprite_Base
alias :select_upd :update
def update
self.tone=@character.tone
select_upd
end
end |
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Posté dans Scripts - Brouillard de Guerre |
berka -
posté le 28/05/2009 à 11:07:34. (493 messages postés) |

| C'est vrai que ce systeme est lourd, mais la taille de la map n'influe que lors de son chargement. Les déplacements sont aussi gourmands en calcul quel que soit les dimensions de la map ! Tout dépend de ce que tu utilises comme scripts/events communs et parallèles.
C'est vrai que mon screen n'est pas très beau, mais avec les autres tilesets, le résultat est meilleur.
Scrapi: trebbor s'etonnait de voir certaines méthodes écrites en anglais. C'est plus facile de nommer les méthodes en anglais parce que les mots sont plus précis et courts.
-----------------------
Pour ceux qui ont des problemes: souris bloquée, plantage total... c'est que le script sollicite un peu trop votre CPU, votre ordi en gros.
Je vous propose de regarder cette ligne:
1
2
| Win32API.new('kernel32','SetPriorityClass','pi','i').call(
Win32API.new('kernel32','GetCurrentProcess','','i').call,256) |
et de changer le 256 en 128.
puis supprimez la si rien ne change.
berka
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques |
Aller à la page: 1 2 3
|
|
|