• Anmelden

1

Samstag, 23. Januar 2010, 18:26

Fähigkeit mit variabler Wirkung + Per RGSS Angreifer herausfinden

Hallo mal wieder,

ich glaub, ich hab in dem Bereich in den letzten Tagen drei oder vier Themen erstellt... Naja, was soll's...

Fähigkeit mit variabler Wirkung:
Ich suche ein Skript oder sonst eine Möglichkeit, eine Fähigkeit zu erstellen, die eine variable Wirkung hat, abhängig von einer der $game_variables.
Das kann z.B. eine Heilfähigkeit sein, die um einen bestimmten Wert heilt, oder eine Angriffsfähigkeit, die Schaden in Höhe des Wertes der Variablen zufügt.

Ich hab es mit common events versucht, bin dabei aber auf folgendes Problem gestoßen:
Ich benutze ein modifiziertes KS, dass die SP als HP verwendet: Bei jedem Angriff werden die SP des Getroffenen geschädigt, erst wenn die SP auf 0 sind, können die HP verletzt werden.
Jetzt das Problem: Der Befehl zum einfachen Senken der SP oder HP eines Gegners (auf der dritten Seite ganz oben) zeigt den Schaden im Kampf nicht an, die SP oder HP werden einfach gesenkt.
Und der Befehl, dem Gegner Schaden zuzufügen (auf der dritten Seite der achte von oben), zeigt zwar den Schaden an, nagt aber logischerweise direkt an den HP.

Jetzt gibt es vermutlich drei Lösungsansätze:
1. Der Befehl zum Senken der SP oder HP muss den Schaden anzeigen
2. Der Schadens-Austeil-Befehl zieht zuerst die SP ab, erst wenn diese zum Zeitpunkt eines Angriffes schon auf 0 sind, zieht er HP ab
3. Ein komplett neues Skript


Per RGSS Angreifer herausfinden:
Wie kann man in Game_Battler 3 herausfinden, wer der Angreifer ist? Ich sehe öfters Dinge wie "attacker.hit" oder Ähnliches... Kann man das auch einfach in "attacker.name" oder so etwas umformen, damit ich eine ganz normale if-Abfrage ("if attacker.name == Bla") erstellen kann?

EDIT: Ich glaub's ja nicht, ich hab das Problem scheinbar lösen können: "if $game_party.actors[0] == attacker"
Ich hoffe, das stimmt so... Aber es scheint zu funktionieren.

Ich hoffe, da kann mir jemand helfen! Danke schon mal im Voraus!

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Lycosa« (23. Januar 2010, 19:09)


Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

2

Montag, 25. Januar 2010, 18:24

Ich kann dir versichern, das wird nicht so funktinoieren^^...
Aber jetzt erstmal von vorne:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
class Interpreter
  def refresh_skills(id, val)
    $data_skills[id].atk_f = val
  end
end
 
 
module Refresh
  def self.skills(id, val)
    $data_skills[id].akt_f = val
  end
end


Kannst dir eins von beiden aussuchen, wenn du die Klasse nimmst, kannst du es nur im Call Script aufrufen und zwar so:

Ruby Quellcode

1
refresh_skills(id, val)

Wenn du das Modul nimmst, dann so:

Ruby Quellcode

1
Refresh.skills(id, val)


Wenn du es dir anderst vorgestellt hast, dann musst du es genauer schildern...

Zu deiner 2. Fragen:
Was willst du damit bezwecken???
Du könntest höchstens abfragen wer als letztes angegriffen hat, ansonsten sehe ich keinen weiteren Sinn der für dich von Nützen währe.
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

3

Montag, 25. Januar 2010, 18:44

Ich könnte noch diese Variante anbieten :)

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
class RPG::Skill
  # "Hit Rate" des Skills mit der ID 2 und 3 sind gleich Variable 99
  def hit
	case id
	when 2
  	return $game_variables[99]
	when 3
  	return $game_variables[99]
	else
  	return @hit
	end
  end
end


Die einzelnen Werte (also def hit für "Hit Rate") stehen in der Helpdatei unter RPG::Skill.
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

4

Montag, 25. Januar 2010, 20:48

Ich hab mir mindestens 1000x die scheiß Scene_Battle durchgelesen und hab nix gefunden xD How ever xD nimm das von Neo :D

Mir ist grad aufgefallen, das .hit eigentlich ne Variable ist, wird sie dann einfach von der definition überschrieben, oder hab ich grad nen bug gefunden? :D
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

5

Montag, 25. Januar 2010, 21:28

hit ist keine Variable, hit ist eine Methode.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
class RPG::Skill
def hit
@hit
end
 
def hit=(i)
@hit = i
end
end

Das ist das Original.
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

6

Dienstag, 26. Januar 2010, 13:56

Danke, ihr zwei!

@Hindi: Ich setze eine Variable gleich dem Schaden, der von einem gewissen Charakter im ganzen Kampf bisher verursacht wurde - Je mehr Schaden er verursacht, desto stärker wird die Fähigkeit, die ich in Problem 1 beschrieben habe ;).

@Neo-Bahamut: Entweder ich bin zu blöd, das richtig einzustellen, oder es funktioniert irgendwie nicht.
Ich hab die ID und die Variable richtig eingestellt... Es stört das Skript doch nicht, dass sich die Variable im Kampf noch ändert, oder?
Auf jeden Fall verursacht das Skript immer genau 1 Schaden. Muss ich bei der Fähigkeit selbst irgendetwas Bestimmtes einstellen?

Wäre es auch möglich, den ersten oder zweiten Lösungsansatz, den ich beschrieben habe, zu benutzen? Dann könnte ich nämlich ziemlich alles andere mit common events selber machen ;).

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

7

Dienstag, 26. Januar 2010, 15:08

Wie sieht denn dein Code jetzt aus?
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

8

Dienstag, 26. Januar 2010, 18:25

Außerdem hat dein Script so einen Bug Neo.... Denn so wie du es geschrieben hast, würde es jetzt für alle Monster mit dem Skill den damag machen, den die Variable enthätl....


Aba mal nochmal ne Frage. Was bringt dies heir:

Ruby Quellcode

1
def hit=(i)

Ich werd daraus einfach nicht schlau. Ich weis zwar das = eine Zuweisung ist, aber ka xD, kannst du das mal plz ausführen?
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

9

Dienstag, 26. Januar 2010, 19:05

Bei mir sieht das so aus:
Ich hab einfach bei den Skripten ein neues Skript erstellt, das irgendwie benannt und da das hier drin stehen:

Quellcode

1
2
3
4
5
6
7
8
9
10
class RPG::Skill
  def hit
	case id
	when 82
  	return $game_variables[170]
	else
  	return @hit
	end
  end
end

In der Datenbank hat die Fähigkeit 82 nur bei "power" den Wert 15, sonst ist bis auf "hit rate" (die ist auf 100) alles auf 0.
Die Fähigkeit fügt genau den Schaden zu, den sie auch ohne Skript zufügen würde: 15.

Was mache ich falsch?

EDIT: Wäre es auch möglich, die oberen beiden Befehle oben auf der rechten Seite ("change enemy hp/sp") so zu ändern, dass im Kampf der verursachte Schaden an den SP/HP angezeigt wird (so, als ob der Gegner ganz normal angegriffen worden wäre)?
Das würde das Problem hier lösen und auch einige weitere Dinge für mich stark vereinfachen!

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

10

Dienstag, 26. Januar 2010, 19:35

Zitat

Außerdem hat dein Script so einen Bug Neo.... Denn so wie du es geschrieben hast, würde es jetzt für alle Monster mit dem Skill den damag machen, den die Variable enthätl....
So solls doch sein oder nicht? Oo -> "Ich suche ein Skript oder sonst eine Möglichkeit, eine Fähigkeit zu erstellen, die eine variable Wirkung hat, abhängig von einer der $game_variables. "

Zitat

Ich werd daraus einfach nicht schlau. Ich weis zwar das = eine Zuweisung ist, aber ka xD, kannst du das mal plz ausführen?
Was soll ich da ausführen? Ist halt ein Methodenname :o

@ Lycosa:
Ich habs mal gemacht, dass bei "Deal Damage" erst die SP, dann die HP abgezogen wird:

Ruby 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
class Interpreter
  # Deal Damage
  def command_338
	# Get adjusted value (resolving references and setting sign)
	value = operate_value(0, @parameters[2], @parameters[3])
	# Process with iterator
	iterate_battler(@parameters[0], @parameters[1]) do |battler|
  	# If battler exists
  	if battler.exist?
 
    	battler.hp -= [0, value-battler.sp].max
    	battler.sp -= value
 
    	# If in battle
    	if $game_temp.in_battle
      	# Set damage pop display
      	battler.damage = value
      	battler.damage_pop = true
    	end
  	end
	end
	# Continue
	return true
  end
end
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

11

Dienstag, 26. Januar 2010, 20:27

Neo-Bahamut, du bist Wahsinn :D . Vielen Dank!

Social Bookmarks