• Anmelden

1

Montag, 19. Januar 2009, 12:42

Suche Kampfschaden-Berechnungs-Skript

Hi,
erstmal vorweg gesagt: Ich bin hier zwar neu, kenne mich mit dem Maker XP ganz gut aus, doch Ruby macht mir echt noch Probleme... Warum eigentlich? :kA:

Nun zu meinem Problem:

Ich möchte ein Skript, das den Kampfschaden abhängig von der getragenen Waffe berechnet (auf jeden Fall anders als dieses blöde "ATK minus PDEF durch 2 ..." bla-und-blub).
Also beispielsweise für alle schweren Nahkampfwaffen mit Stärke, für alle Dolche mit Stärke und Geschick, für alle Bögen mit Geschick und Stärke, für Zauberstäbe aber mit Intelligenz?

Lange Rede, kurzer Sinn. Ich suche ein Skript, in dem nach verschiedenen Waffen-IDs abgefragt wird und diese jeweils verschiedene Schadensberechnungen erhalten.

Hoffe, das war verständlich und jemand kann mir helfen. Danke im Voraus!

Anemone

Rekrut

Motto: Was zählt ist nicht das eigene Leben, sondern es aufs Spiel zusetzen.

  • Nachricht senden

2

Dienstag, 20. Januar 2009, 16:04

Hier ist mal ein script das du einfach über Main einfügst.

Spoiler

Quellcode

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
=begin
===========================================
   Calculate Damage for each Weapon and Enemy
-----------------------------------------------------------------
Autor: Anemone
Date: 20/01/2009
===========================================
Usage:
-----------------------------------------------------------------
     CalcDMG.analyze actor_id, enemy_id[, weapon_id];
to calculate the damage what each enemy will take.
     enemy_id=Array/Integer
     actor_id=Integer
>>additional:
     weapon_id=Array/Integer, Standart=Array#[0..weapon_data_size]
-----------------------------------------------------------------
     CalcDMG.add_weapon_type weapon_id, type
to add a weapon type
     weapon_id=Integer
     type=Integer/String
              0='Sword'
              1='Staff'
              2='Axe'
              3='Dagger'
              ...
              (to edit effeckt: L.67 upto L.83)
-----------------------------------------------------------------
=end
class Game_Actor
  attr_accessor :weapon_id
end
module CalcDMG
  def self.add_weapon_type id, type
    case type
    when 0
      str='Sword'
    when 1
      str='Staff'
    when 2
      str='Axe'
    when 3
      str='Dagger'
    else
      str=type
    end
    @weapon_type[id]=str
  end
  def self.start
    @weapon_type=[]
  end
  def self.setup actor_id, enemy_id, weapon_id=nil
    @result=[]
    @actor_id=actor_id
    @enemy_id=enemy_id
    @enemy_id=[@enemy_id] unless @enemy_id.is_a? Array
    if weapon_id.nil?
      @weapon_id=[0..$data_weapons.size-1]
    else
      @weapon_id=weapon_id
      @weapon_id=[@weapon_id] unless @weapon_id.is_a? Array
    end
    self.calc_all
  end
  def self.calc_single enemy, actor, weapon_id
    actor.weapon_id=weapon_id
    case @weapon_type[id]
    when 'Sword'
      power=actor.dex-enemy.pdef/2
      multiplikator=20+actor.str
    when 'Staff'
      power=actor.int-enemy.pdef/2
      multiplikator=20+actor.dex
    when 'Axe'
      power=actor.atk-enemy.pdef/2
      multiplikator=20+actor.str
    when 'Dagger'
      power=actor.atk-enemy.pdef/2
      multiplikator=20+actor.agi
    else
      power=actor.atk-enemy.pdef/2
      multiplikator=20+actor.str
    end
    damage=power*multiplikator/20
    damage=0 if damage < 0
    return damage
  end
  def self.calc_all
    for wid in @weapon_id
      @result[wid]=[] if @result[wid].nil?
      for eid in @enemy_id
        @result[wid][eid]=self.calc_single $data_enemies[eid], $game_actors[@actor_id], wid
      end
    end
  end
  def self.output
    p @result
  end
  def self.output_htm
    string="<html><head><title>Result for #{$game_actors[@actor_id].name}/#{@actor_id}</title></head><body>"
    @result.each_index do |wid|
      next if wid.nil? or @result[wid].nil?
      string+="<br><br><b>#{$data_weapons[wid].name}(#{wid})</b><br><ul>"
      @result[wid].each_index do |eid|
        if eid.nil?
          string+="ERROR<br>"
        else
          if $data_enemies[eid].nil?
            next
          else
            name=$data_enemies[eid].name
          end
          string+="#{name}(#{eid})=#{@result[wid][eid]}<br>"
        end
      end
      string+="</ul>"
    end
    string+="</body></html>"
    save_data(string,'CalcDMGfor'+sprintf("%03d",@actor_id)+'.htm')
  end
  def self.analyze actor_id, enemy_id, weapon_id=nil
    self.setup actor_id, enemy_id, weapon_id
    self.output_htm
  end
end
CalcDMG.start

zum Lesen den Text mit der Maus markieren


Du musst den aufrufs code irgendwann im spiel benutzten nachdem $game_actors, $data_weapons und $data_enemies definiert wurde.
Verwendung steht zwar im Kopf aber ich gebe dir hier noch einmal ein beispiel:

Quellcode

1
CalcDMG.analyze 1, [1,2], [1,2,3]

output als .htm im hauptordner:
Spoiler

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#CalcDMGfor001.htm
"Q
 
Bronze Sword(1)
 
      Ghost(1)=282
      Basilisk(2)=274
 
 
 
Iron Sword(2)
 
      Ghost(1)=404
      Basilisk(2)=395
 
 
 
Steel Sword(3)
 
      Ghost(1)=556
      Basilisk(2)=548

zum Lesen den Text mit der Maus markieren


Um den Waffen nun einer Bestimmten schadens berechnung zu zuordnen benutzt du:

Quellcode

1
CalcDMG.add_weapon_type weapon_id, type

Beispiel:

Quellcode

1
2
CalcDMG.add_weapon_type 1, 0
CalcDMG.add_weapon_type 1, 'Sword'

Damit wird die waffe mit der id 1 der 'Sword' schadensberechnung zugeordned.
Ob du nun die schreib weise mit den String ('Sword') oder die mit der ID (0) nimmst ist egal.
Die IDs der Berechnungsmethoden sind im Kopf erklärt.
Bei Bugs oder sonstige Missverständnisse bitte melden.

mfg. Anemone~

3

Dienstag, 20. Januar 2009, 18:58

Habe schon ein anderes, tut mir Leid. Trotzdem vielen Dank für deine Hilfe, auch wenn ich sie nicht genutzt habe.

Kann geschlossen werden (meinetwegen).

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Aliai_Mon« (20. Januar 2009, 19:07)


Ähnliche Themen

Social Bookmarks