Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche nach Copy-Actors-Scrypt



OneEyeShadow
06.08.2009, 18:46
Hallo, ich suche nach einem Scrypt, mit dem ich bereits erstellte Actors während dem Spiel Klonen kann, so dass ich, wenn ich will, dass Z.B. der erste Actor, den ich gemacht habe, 4 mal in meiner Truppe ist, ihn nicht 4 mal zu machen brauche.
Also dieses Script, nach dem ich suche soll einen der Actor Kopieren, ihm eine neue, ID geben (die ich dann in eine Variable abspeichern kann), und ihn dann zu behandeln wie einen eigenen Actor, dass Held 1 und die Kopie von Held 1 auf verschiedenen Leveln sein Können, verschiede Skills, sowas halt.

Ach ja, da es dann ja auch nicht besser geht, würde ich mich auch freuen, wenn mir jemand erklärt, wie man mit Variablen bestimmte Actor der Truppe hinzufügt oder was auch immer (ich denke ja mal das man das doch irgendwie mit irgendeinem Script befehl machen kann(?)).

Oh, und noch eine Frage, ist es möglich einen Switch oder ein Common Event zu Aktivieren, wenn ein bestimmter Actor z.B. ein bestimmtes Level erreicht oder ein bestimmtes Item benutzt, oder eine Bestimmte Rüstung/Waffe/etc. trägt oder er einen bestimmten Skill beherrscht oder einsetzt (Das währe dann nämlich um einiges Praktischer, als einen Haufen von Commen Event Befehlen zu machen, die sich onehin nur in den verwendeten Variablen unterscheiden, bzw. würde dass ja auch bei einigen garnicht richtig funktionieren)?

Und noch eine Frage zum Abschluss, gibt es irgendeine Möglichkeit mit einer Truppe von dem momentanen Spielstand gegen eine andere Gruppe aus einem anderen Save zu kämpfen? Allein gegen den Computer (mit einer AI, die alles zufällig auswähl, wenns nicht anders geht) oder im Hotseat gegen einen anderen Spieler? Ist soetwas möglich? Wenn nein, ok!


Ok, dass ist einiges, nach dem ich da frage, einiges mehr als ich jetzt in den Titel geschrieben habe, aber ich würde mich Freuen, wenn mir irgendwer helfen würde.

Shining Advances
06.08.2009, 20:00
bezüglich der ersten beiden absätze:


class Game_Actor
attr_accessor :exp_list
attr_accessor :skills
attr_accessor :states
attr_accessor :states_turn
attr_accessor :current_action
def clone
klon = super
klon.exp_list = @exp_list.clone
klon.skills = @skills.clone
klon.states = @states.clone
klon.states_turn = @states_turn.clone
klon.current_action = Game_BattleAction.new
return klon
end
def actor_id
return @actor_id if @neue_id.nil?
return @neue_id
end
def actor_id=(n)
@neue_id = n
end
end

class Game_Actors
def []=(actor_id,actor)
actor = actor.actor_id if actor.is_a?(Game_Actor)
@data[actor_id] = @data[actor].clone
@data[actor_id].actor_id = actor_id
return @data[actor_id]
end
def [](actor_id)
if actor_id > 999
return nil
end
if @data[actor_id] == nil
return nil if $data_actors[actor_id].nil?
@data[actor_id] = Game_Actor.new(actor_id)
end
return @data[actor_id]
end
end
über main einfügen und genießen (soweit es möglich ist...habs nicht ausführlich getestet :/)
den helden klont man per call script

$game_actors[neue ID] = id des zu klonenden helden
oder
$game_actors[neue ID] = der zu klonende held

Bsp:

$game_actors[9] = 1 #klont den ersten helden in der DB (Arshes ftw)
oder
$game_actors[9] = $game_party.actors[1] #klont den 2. helden in der party ($game_party.actors[0] wäre der erste held)


neue helden fügt man der party so zu:

$game_party.add_actor(ID in der DB)
um es per vairable zu machen, einfach in den klammern $game_variables[ID] einfügen
Bsp

$game_party.add_actor($game_variables[1])

einen helden entfernt man genauso. nur mit remove_actor statt add_actor.

bezüglich des 3. absatzes:
ja es ist möglich...
aber ich glaub ich versteh nicht ganz, was du wissen willst.
wie man level, rüstung, skills etc der neuen helden herausfindet?

bezüglich letzten absatzes:
grundsätzlich lässt sich alles machen! :D
allerding muss man bedenken, dass ein monster nicht das selbe wie ein held ist!
(allein schon weil helden keine ki einstellungen haben wie normale gegner)
ein weiteres problem ist, dass man das kampf system ein wenig umschreiben müsste um einem spieler zu ermöglichen, die aktionen des gegners zu steuern.
wenn du willst, kann ich mal probieren so etwas zu schreiben. musst nur sagen ob der gegner vom computer oder vom 2. spieler gesteuert wird...oder sogar beides...und man wählt es im spiel aus ;)

OneEyeShadow
06.08.2009, 20:15
Hey, ich hätte nicht gedacht, dass mir jemand so schnell antwortet. Danke, ich probier dein Skript dann gleich mal aus.

Zum Dritten Absatz: Ich will eigentlich nur wissen, ob ich irgendwie einen Switch Bzw. ein Common Event starten kann, wenn ein Bestimmter Held etwas bestimmtes Macht (z.B. wenn er ein Item Benutzt oder er ein Bestimmtes Levell bekommt oder mit etwas bestimmten ausgerüstet ist), und das möglichst ohne einen Switch oder ein Common Event dafür verschwenden zu müssen.

Zum letzten Absatz: Kannst du echt sowas schreiben? Wenn du so ein Skript für mich - und wahrscheinlich andere, die es hier finden werden - schreiben willst, dann bevorzugt mit den Möglichkeiten gegen KI und im Hotseat (o.ä.) gleichermaßen zu spielen. Ich denke die KI muss dabei nicht sonderlich anspruchsvoll sein, sie muss höchstens wissen, wann sie z.B. Heil Zauber oder so verwenden muss, aber mit völlig zufälligen Aktionen währe die KI eigentlich auch schon OK, der Spieler währe ihr gegenüber dann nur eben strategisch im Vorteil, aber das ist ja eigentlich nicht sonderlich schlimm.

edit: soweit, wie ich das Skript bisher getestet hab, funktioniert es einwandfrei. Ich hätte nur eine Frage, wie kann man denn per Script Level Parameter etc. verändern, da ich es, zumindest wenn ich nicht mit lauter leeren Actors arbeiten will, ja nicht über normale Event Befehle machen kann?

Shining Advances
07.08.2009, 14:32
level, paramameter etc änderst du per held.eigenschaft = neuer wert
held durch $game_actors[ID] oder $game_party.actors[Position-1] ersetzen.
eigenschaft durch eines der folgenden ersetzen:

maxsp
maxhp
int
dex
str
agi
level
exp

Bsp:
$game_actors[9].level = 10 <-held erreicht sufe 10
$game_actors[9].level += 1 <- level wird um 1 erhöht. (-= würde es um 1 herab setzen)

bei skills und ausrüstungen funktioniert es ein wenig anders.
für skills musst du nach dem helden .learn_skill(ID) bzw .forget_skill(ID) einfügen und für rüstungen .equip(Position,ID)
Positionen sind:
0 => Waffe
1 => Schild
2 => Kopf
3 => Körper
4 => Accessoir
ID ist die ID der Waffe/Rüstung/Skill in der DB
wenn ID gleich 0 ist, wird die rüstung entfernt.

Bsp
$game_actors[1].equip(0,1)
in einem RTP Spiel würde Arshes mit dem Bronzeschwert ausgerüstet werden.


BEim Kampfscript, fehlt bisher noch der Multiplayer, aber gegen einen Spielstand zu kämpfen funktioniert schon.

In den ersten Zeilen gibt die Zahl die ID der Truppe an, die einen bestimmten Spielstand läd.
Im Moment würde, die erste Truppe den ersten Spielstand laden, die 2. den 2. etc.
Auf diese Weise kannst du auch schon über Battle Test gegen Spielstände kämpfen.
Existiert ein Speicher nicht, wird die ursprüngliche Truppe als Gegner eingesetzt.

Da du die ersten Truppen vermutlich schon längst verwendest, kannst du ohne weiteres die Zahlen durch noch unbenutze Truppen ersetzen.
Falls bei dir die Speicherdateien anders heißen (manche Scripte benutzen andere Speicher und die 1.01 version benutzt die endung .sav statt .rxdata) kannst du einfach die Dateinamen hinter den Zahlen verändern.
Für den Fall, dass du ein Script verwendest, dass mehr als 4 Speicherstände ermöglicht, kannst du die Liste auch ohne weiteres durch zb 5 => "Save5.rxdata" erweitern (Bedenke aber, dass dann nach Save4.rxdata ein Komma gehört ;))

Die Zeilen darunter gehören zu den KI Einstellungen. Du kannst sie deinen Wünschen entsprechend verändern.
HEAL = % der HP ab wann geheilt wird. Achtung gilt für die HP des Skillanwenders.
Wenn ein Partymitglied am sterben ist und der Heiler noch volle Leben hat, wird er selbst bei einer Einstellung von 99 seinen Partner verrecken lassen!
ATTACK = Zahl von 1-10 Die Warscheinlichkeit normal anzugreifen statt einen Skill zu verwenden.
(Rating der Skills ist 5. Heilzauber haben ein Rating von 10)
GOLD = Menge des zu gewinnenden Goldes pro gegn. Held
EXP = Erfahrungspunkte pro gegn. Held
MINSP = Ab welcher SP Menge nur noch normal angegriffen wird.

Script:

Troop2Save = {
1 => "Save1.rxdata",
2 => "Save2.rxdata",
3 => "Save3.rxdata",
4 => "Save4.rxdata"
}
HEAL = 100
ATTACK = 1
GOLD = 0
EXP = 0
MINSP = 150
module KI
class <<self
def create_skill_table
@skills = {}
for skill in $data_skills
next if skill.nil?
spell = RPG::Enemy::Action.new
spell.kind = 1
spell.skill_id = skill.id
if skill.power < 0
spell.condition_hp = HEAL
spell.rating = 10
end
@skills[skill.id] = spell
end
end

def skills
return @skills
end

def attack
n = RPG::Enemy::Action.new
n.rating = ATTACK
return n
end
end
end

class Game_Temp
attr_accessor :ki
alias initialize_multi initialize unless defined?(initialize_multi)
def initialize
@ki = true
initialize_multi
end
end

class Scene_Title
alias main_multi main unless defined?(setup_main)
def main
main_multi
KI.create_skill_table
end
end

class Game_Troop
alias setup_multi setup unless defined?(setup_multi)
def setup(id)
if Troop2Save[id].nil? or not File.exists?(Troop2Save[id])
setup_multi(id)
else
load_enemy(Troop2Save[id])
end
end

def load_enemy(filename)
file = File.open(filename, "rb")
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
actors = Marshal.load(file)
party = Marshal.load(file)
file.close
muell = nil
@enemies = party.actors
end
end

class Game_Actor
def screen_y
if $game_troop.enemies.include?(self)
return 250
else
return 464
end
end
def treasure_prob
return 0
end
def gold
return GOLD
end
def exp
return EXP
end
def index
if $game_party.actors.index(self).nil?
return $game_troop.enemies.index(self)
else
return $game_party.actors.index(self)
end
end

def make_action
# Clear current action
self.current_action.clear
# If unable to move
unless self.movable?
# End Method
return
end
# Extract current effective actions
available_actions = []
rating_max = 0

actions = []
for i in 1..$data_skills.size
actions.push(KI.skills[i]) if self.skills.include?(i)
end

actions.push(KI.attack)
actions[-1].rating = 10 if self.sp < MINSP
for action in actions
# Confirm turn conditions
n = $game_temp.battle_turn
a = action.condition_turn_a
b = action.condition_turn_b
if (b == 0 and n != a) or
(b > 0 and (n < 1 or n < a or n % b != a % b))
next
end
# Confirm HP conditions
if self.hp * 100.0 / self.maxhp > action.condition_hp
next
end
# Confirm level conditions
if $game_party.max_level < action.condition_level
next
end
# Confirm switch conditions
switch_id = action.condition_switch_id
if switch_id > 0 and $game_switches[switch_id] == false
next
end
# Add this action to applicable conditions
available_actions.push(action)
if action.rating > rating_max
rating_max = action.rating
end
end

# Calculate total with max rating value at 3 (exclude 0 or less)
ratings_total = 0
for action in available_actions
if action.rating > rating_max - 3
ratings_total += action.rating - (rating_max - 3)
end
end
# If ratings total isn't 0
if ratings_total > 0
# Create random numbers
value = rand(ratings_total)
# Set things that correspond to created random numbers as current action
for action in available_actions
if action.rating > rating_max - 3
if value < action.rating - (rating_max - 3)
self.current_action.kind = action.kind
self.current_action.basic = action.basic
self.current_action.skill_id = action.skill_id
self.current_action.decide_random_target_for_enemy
return
else
value -= action.rating - (rating_max - 3)
end
end
end
end
end
end

class Scene_Battle
def set_target_battlers(scope)
# If battler performing action is enemy
if $game_troop.enemies.include?(@active_battler)
# Branch by effect scope
case scope
when 1 # single enemy
index = @active_battler.current_action.target_index
@target_battlers.push($game_party.smooth_target_actor(index))
when 2 # all enemies
for actor in $game_party.actors
if actor.exist?
@target_battlers.push(actor)
end
end
when 3 # single ally
index = @active_battler.current_action.target_index
@target_battlers.push($game_troop.smooth_target_enemy(index))
when 4 # all allies
for enemy in $game_troop.enemies
if enemy.exist?
@target_battlers.push(enemy)
end
end
when 5 # single ally (HP 0)
index = @active_battler.current_action.target_index
enemy = $game_troop.enemies[index]
if enemy != nil and enemy.hp0?
@target_battlers.push(enemy)
end
when 6 # all allies (HP 0)
for enemy in $game_troop.enemies
if enemy != nil and enemy.hp0?
@target_battlers.push(enemy)
end
end
when 7 # user
@target_battlers.push(@active_battler)
end
# If battler performing action is actor
else
# Branch by effect scope
case scope
when 1 # single enemy
index = @active_battler.current_action.target_index
@target_battlers.push($game_troop.smooth_target_enemy(index))
when 2 # all enemies
for enemy in $game_troop.enemies
if enemy.exist?
@target_battlers.push(enemy)
end
end
when 3 # single ally
index = @active_battler.current_action.target_index
@target_battlers.push($game_party.smooth_target_actor(index))
when 4 # all allies
for actor in $game_party.actors
if actor.exist?
@target_battlers.push(actor)
end
end
when 5 # single ally (HP 0)
index = @active_battler.current_action.target_index
actor = $game_party.actors[index]
if actor != nil and actor.hp0?
@target_battlers.push(actor)
end
when 6 # all allies (HP 0)
for actor in $game_party.actors
if actor != nil and actor.hp0?
@target_battlers.push(actor)
end
end
when 7 # user
@target_battlers.push(@active_battler)
end
end
end
def make_basic_action_result
# If attack
if @active_battler.current_action.basic == 0
# Set anaimation ID
@animation1_id = @active_battler.animation1_id
@animation2_id = @active_battler.animation2_id
# If action battler is enemy
if $game_troop.enemies.include?(@active_battler)
if @active_battler.restriction == 3
target = $game_troop.random_target_enemy
elsif @active_battler.restriction == 2
target = $game_party.random_target_actor
else
index = @active_battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
else
# If action battler is actor
if @active_battler.restriction == 3
target = $game_party.random_target_actor
elsif @active_battler.restriction == 2
target = $game_troop.random_target_enemy
else
index = @active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
end
end
# Set array of targeted battlers
@target_battlers = [target]
# Apply normal attack results
for target in @target_battlers
target.attack_effect(@active_battler)
end
return
end
# If guard
if @active_battler.current_action.basic == 1
# Display "Guard" in help window
@help_window.set_text($data_system.words.guard, 1)
return
end
# If escape
if @active_battler.is_a?(Game_Enemy) and
@active_battler.current_action.basic == 2
# Display "Escape" in help window
@help_window.set_text("Escape", 1)
# Escape
@active_battler.escape
return
end
# If doing nothing
if @active_battler.current_action.basic == 3
# Clear battler being forced into action
$game_temp.forcing_battler = nil
# Shift to step 1
@phase4_step = 1
return
end
end
end

OneEyeShadow
07.08.2009, 16:01
Hey danke, aber wie kann ich denn das Script jetzt im Spiel aufrufen?
Oh, und noch eine Frage, ist es irgendwie Möglich, zwischen den verschiedenen Saves Items, Rüstungen, Variablen Werte, oder Actor zu übertragen? Währe nämlich auch ziemlich praktisch ...

PS. Ich finde es wirklich unglaublich, dass du in so wenig Zeit ein funktionierendes Skript (ich konnts noch nicht ausprobieren, denk aber mal, dass es funktioniert) dieser größe (324 Zeilen!) geschrieben hasst.

Shining Advances
08.08.2009, 19:45
du rufst es auf, indem du einfach einen kampf gegen die truppe, die du bei

Troop2Save = {
1 => "Save1.rxdata",
2 => "Save2.rxdata",
3 => "Save3.rxdata",
4 => "Save4.rxdata"
}
angegeben hast, startest.

(das andere kampfscript damit ersetzen, falls dus bereits eingebaut hast)

Troop2Save = {
1 => "Save1.rxdata",
2 => "Save2.rxdata",
3 => "Save3.rxdata",
4 => "Save4.rxdata"
}
HEAL = 100
ATTACK = 1
GOLD = 0
EXP = 0
MINSP = 150
module KI
class <<self
def create_skill_table
@skills = {}
for skill in $data_skills
next if skill.nil?
spell = RPG::Enemy::Action.new
spell.kind = 1
spell.skill_id = skill.id
if skill.power < 0
spell.condition_hp = HEAL
spell.rating = 10
end
@skills[skill.id] = spell
end
end
def skills
return @skills
end
def attack
n = RPG::Enemy::Action.new
n.rating = ATTACK
return n
end
end
end
class Game_Temp
attr_accessor :ki
alias initialize_multi initialize unless defined?(initialize_multi)
def initialize
@ki = true
initialize_multi
end
end
class Scene_Title
alias main_multi main unless defined?(main_multi)
def main
main_multi
KI.create_skill_table
end
end
class Scene_Battle
attr_reader :turn
unless defined?(main_multi)
alias main_multi main
end
def main
@turn = 0
main_multi
end
def start_phase2
@phase = 2
@actor_index = -1
@active_battler = nil
@party_command_window.active = true
@party_command_window.visible = true
@actor_command_window.active = false
@actor_command_window.visible = false
$game_temp.battle_main_phase = false
if @turn % 2 == 0 or $game_temp.ki
$game_party.clear_actions
else
for enemy in $game_troop.enemies
enemy.current_action.clear
end
end
unless $game_party.inputable?
start_phase4
end
end
def start_phase4
@turn += 1
if @turn % 2 == 1 and not $game_temp.ki
start_phase2
return
end
@phase = 4
$game_temp.battle_turn += 1
for index in 0...$data_troops[@troop_id].pages.size
page = $data_troops[@troop_id].pages[index]
if page.span == 1
$game_temp.battle_event_flags[index] = false
end
end
@actor_index = -1
@active_battler = nil
@party_command_window.active = false
@party_command_window.visible = false
@actor_command_window.active = false
@actor_command_window.visible = false
$game_temp.battle_main_phase = true
if $game_temp.ki
for enemy in $game_troop.enemies
enemy.make_action
end
end
make_action_orders
@phase4_step = 1
end
def phase3_next_actor
begin
if @active_battler != nil
@active_battler.blink = false
end
if @turn % 2 == 0 or $game_temp.ki
if @actor_index == $game_party.actors.size-1
start_phase4
return
end
@actor_index += 1
@active_battler = $game_party.actors[@actor_index]
else
if @actor_index == $game_troop.enemies.size-1
start_phase4
return
end
@actor_index += 1
@active_battler = $game_troop.enemies[@actor_index]
end
@active_battler.blink = true
end until @active_battler.inputable?
phase3_setup_command_window
end
def phase3_prior_actor
begin
if @active_battler != nil
@active_battler.blink = false
end
if @actor_index == 0
start_phase2
return
end
@actor_index -= 1
if @turn % 2 == 0 or $game_temp.ki
@active_battler = $game_party.actors[@actor_index]
else
@active_battler = $game_troop.enemies[@actor_index]
end
@active_battler.blink = true
end until @active_battler.inputable?
phase3_setup_command_window
end
def start_enemy_select
if @turn % 2 == 0 or $game_temp.ki
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
else
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2)
end
@enemy_arrow.help_window = @help_window
@actor_command_window.active = false
@actor_command_window.visible = false
end
def set_target_battlers(scope)
if $game_troop.enemies.include?(@active_battler)
case scope
when 1 # single enemy
index = @active_battler.current_action.target_index
@target_battlers.push($game_party.smooth_target_actor(index))
when 2 # all enemies
for actor in $game_party.actors
if actor.exist?
@target_battlers.push(actor)
end
end
when 3 # single ally
index = @active_battler.current_action.target_index
@target_battlers.push($game_troop.smooth_target_enemy(index))
when 4 # all allies
for enemy in $game_troop.enemies
if enemy.exist?
@target_battlers.push(enemy)
end
end
when 5 # single ally (HP 0)
index = @active_battler.current_action.target_index
enemy = $game_troop.enemies[index]
if enemy != nil and enemy.hp0?
@target_battlers.push(enemy)
end
when 6 # all allies (HP 0)
for enemy in $game_troop.enemies
if enemy != nil and enemy.hp0?
@target_battlers.push(enemy)
end
end
when 7 # user
@target_battlers.push(@active_battler)
end
else
case scope
when 1 # single enemy
index = @active_battler.current_action.target_index
@target_battlers.push($game_troop.smooth_target_enemy(index))
when 2 # all enemies
for enemy in $game_troop.enemies
if enemy.exist?
@target_battlers.push(enemy)
end
end
when 3 # single ally
index = @active_battler.current_action.target_index
@target_battlers.push($game_party.smooth_target_actor(index))
when 4 # all allies
for actor in $game_party.actors
if actor.exist?
@target_battlers.push(actor)
end
end
when 5 # single ally (HP 0)
index = @active_battler.current_action.target_index
actor = $game_party.actors[index]
if actor != nil and actor.hp0?
@target_battlers.push(actor)
end
when 6 # all allies (HP 0)
for actor in $game_party.actors
if actor != nil and actor.hp0?
@target_battlers.push(actor)
end
end
when 7 # user
@target_battlers.push(@active_battler)
end
end
end
def make_basic_action_result
if @active_battler.current_action.basic == 0
@animation1_id = @active_battler.animation1_id
@animation2_id = @active_battler.animation2_id
if $game_troop.enemies.include?(@active_battler)
if @active_battler.restriction == 3
target = $game_troop.random_target_enemy
elsif @active_battler.restriction == 2
target = $game_party.random_target_actor
else
index = @active_battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
else
if @active_battler.restriction == 3
target = $game_party.random_target_actor
elsif @active_battler.restriction == 2
target = $game_troop.random_target_enemy
else
index = @active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
end
end
@target_battlers = [target]
for target in @target_battlers
target.attack_effect(@active_battler)
end
return
end
if @active_battler.current_action.basic == 1
@help_window.set_text($data_system.words.guard, 1)
return
end
if @active_battler.is_a?(Game_Enemy) and
@active_battler.current_action.basic == 2
@help_window.set_text("Escape", 1)
@active_battler.escape
return
end
if @active_battler.current_action.basic == 3
$game_temp.forcing_battler = nil
@phase4_step = 1
return
end
end
end
class Game_Troop
alias setup_multi setup unless defined?(setup_multi)
def setup(id)
if Troop2Save[id].nil? or not File.exists?(Troop2Save[id])
setup_multi(id)
else
load_enemy(Troop2Save[id])
end
end
def load_enemy(filename)
file = File.open(filename, "rb")
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
muell = Marshal.load(file)
actors = Marshal.load(file)
party = Marshal.load(file)
file.close
muell = nil
@enemies = party.actors
end
end
class Game_Actor
def screen_y
if $game_troop.enemies.include?(self)
return 250
else
return 464
end
end
def treasure_prob
return 0
end
def gold
return GOLD
end
def exp
return EXP
end
def index
if $game_party.actors.index(self).nil?
return $game_troop.enemies.index(self)
else
return $game_party.actors.index(self)
end
end
def make_action
self.current_action.clear
unless self.movable?
return
end
available_actions = []
rating_max = 0
actions = []
for i in 1..$data_skills.size
actions.push(KI.skills[i]) if self.skills.include?(i)
end
actions.push(KI.attack)
actions[-1].rating = 10 if self.sp < MINSP
for action in actions
n = $game_temp.battle_turn
a = action.condition_turn_a
b = action.condition_turn_b
if (b == 0 and n != a) or
(b > 0 and (n < 1 or n < a or n % b != a % b))
next
end
if self.hp * 100.0 / self.maxhp > action.condition_hp
next
end
if $game_party.max_level < action.condition_level
next
end
switch_id = action.condition_switch_id
if switch_id > 0 and $game_switches[switch_id] == false
next
end
available_actions.push(action)
if action.rating > rating_max
rating_max = action.rating
end
end
ratings_total = 0
for action in available_actions
if action.rating > rating_max - 3
ratings_total += action.rating - (rating_max - 3)
end
end
if ratings_total > 0
value = rand(ratings_total)
for action in available_actions
if action.rating > rating_max - 3
if value < action.rating - (rating_max - 3)
self.current_action.kind = action.kind
self.current_action.basic = action.basic
self.current_action.skill_id = action.skill_id
self.current_action.decide_random_target_for_enemy
return
else
value -= action.rating - (rating_max - 3)
end
end
end
end
end
end
class Window_BattleStatus < Window_Base
unless defined?(initialize_multi)
alias initialize_multi initialize
alias update_multi update
end
def initialize
@old_turn = 0
initialize_multi
end
def refresh
self.contents.clear
a = $game_troop.enemies
a = $game_party.actors if $scene.turn % 2 == 0 or $game_temp.ki
@item_max = a.size
for i in 0...a.size
actor = a[i]
actor_x = i * 160 + 4
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
def update
if @old_turn != $scene.turn
@old_turn = $scene.turn
refresh
end
update_multi
end
end
class Arrow_Enemy < Arrow_Base
def enemy
if $scene.turn % 2 == 0
return $game_troop.enemies[@index]
else
return $game_party.actors[@index]
end
end
def update
super
if $scene.turn % 2 == 0
a = $game_troop.enemies
else
a = $game_party.actors
end
a.size.times do
break if self.enemy.exist?
@index += 1
@index %= a.size
end
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
a.size.times do
@index += 1
@index %= a.size
break if self.enemy.exist?
end
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
a.size.times do
@index += a.size - 1
@index %= a.size
break if self.enemy.exist?
end
end
if self.enemy != nil
self.x = self.enemy.screen_x
self.y = self.enemy.screen_y
end
end
end
class Arrow_Actor < Arrow_Base
def actor
if $scene.turn % 2 == 0 or $game_temp.ki
return $game_party.actors[@index]
end
return $game_troop.enemies[@index]
end
def update
super
if $scene.turn % 2 == 0 or $game_temp.ki
a = $game_party.actors
else
a = $game_troop.enemies
end
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@index += 1
@index %= a.size
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@index += a.size - 1
@index %= a.size
end
if self.actor != nil
self.x = self.actor.screen_x
self.y = self.actor.screen_y
end
end
end


natürlich könnte man ein script machen, dass items oder helden tauscht. man muss sich allerdings überlegen ob das wirklich so praktisch wäre.
so etwas kann zb schnell das balancing des spiels zerstören.
und was ist wenn 2 geschwister das spiel spielen und der bruder/die schwester einfach mal ein paar seltene gegenstände vom spielstand des anderen klaut :/
(das ist echt nicht lustig...ich hab meinem kleinem bruder meine pokemon edition ausgeliehen und er hat meine lv 100er pokemon vertauscht -.-)
auch ein problem ist, dass man spielstände einfach kopieren kann und somit seine items verdoppelt.

OneEyeShadow
08.08.2009, 20:53
Cool, das Script funktioniert wirklich wunderbar.

Zu deinen Einwänden zum Tauschen verschiedener Dinge: Natürlich kann das Balancing dadurch stark gestört werden, aber nicht, wenn man starke Negativ efekte für zu gute dinge einbaut (wobei sich diese selbstverständlich im Laufe des Spieles immer erhöhen werden, da die eigenen Standarts im Spielverlauf immer höher werden, so kann beispielsweise der getauschte Actor je nachdem, wie weit man im Spiel fortgeschritten ist, die Befehle, die man ihm Gibt häufig verweigern, oder sogar eigene Actor angreifen oder so).
Aber natürlich währe da noch das Zweite Problem was du erwähnt hast, aber solange der Spieler keine Umwege benutzt, um ans Ziel zu kommen, lässt sie das eigentlich ganz gut lösen, wenn das Spiel startet bekommt eine Variable einen Zufälligen Wert (so zwischen 1 und 10000) und wenn der Spieler den Save nun Kopiert und versucht was auch immer auf seinen Original Spielstand zu Kopieren, wird immer erst die besagte Variable verglichen, sollte diese Gleich sein, so ist kein Tausch möglich. Allerdings würde bei dieser Methode noch der Nachteil bestehen, dass der Spieler sich Was auch immer Holen kann, indem er erst auf einen Fremden und dann wieder auf seinen eigenen überträgt. Da fällt mir allerdings ein, dass man dieses Problem doch rein Theoretisch umgehen könnte, wenn man bei allen Dingen, die man übertragen kann diese Variable automatisch mit gespeichert werden würde, dann könnte man vorm übertragen einfach nachschauen lassen, ob das Item, der Actor oder sonstwas die Gleiche nummer hat wie der Spieler, zu dem sie übertragen würde. So würde ich immerhin versuchen, dass Problem zu lösen, zwar auch nicht die beste lösung, aber immerhin würde es damit gehen, sofern das möglich ist ...

Shining Advances
09.08.2009, 12:59
an sone spielstand id für jeden gegenstand hab ich auch schon gedacht. das wäre auch recht einfach umzusetzen. problematisch ist dann aber, dass es einem nicht mehr möglich wäre gegenstände zurück zu tauschen.
dieses problem gäbe es nicht, wenn diese spielstand id nicht auf die gegenstände übertragen wird. doch in dem fall gäbe es, die von dir genannte möglichkeit, einfach über einen anderen spielstand zu tauschen.
aber solange es sich nicht gerade um ein online spiel handelt, muss man eh nicht alle cheat möglichkeiten vernichten (sonst wären ja alle 2k(3) spiele mit molebox verschlüsselt ;)).

also wenn du willst kann ich dir so ein tauschscript machen. musst mir nur sagen welche sicherheitsmaßnahmen du haben möchtest (keine/id für gegenstände/id für spielstand) und ob ich gleich die gesammte scene scripten soll oder nur ein paar call script commandos, mit denen man herausfindet welche gegenstände ein spielstand hat und mit denen man den tausch ausführt. in dem fall könntest du den gesammten rest per common events/eigene menüs regeln und vlt noch nette animationen wärend des tausches einbringen :)
ich könnte auch versuchen beides zu vermischen. also dass du nur ne common event id angibst un dieses common event dann die animation enthält und ausgeführt wird, wenn etwas getauscht wird (und der rest wie zb das menü wird per rgss gehandhabt.)

OneEyeShadow
09.08.2009, 13:24
Also, wenn du ein Skript basteln willst, dass das ermöglicht, lass mir ncoh die Freiheit alles mit Callscripts selbst regeln zu können, also einzelne Variablenabfragen von Item-, Actor- und den normalen Spiel Variablen, sowie die Fähigkeit diese einzeln auf den anderen Spielstand, und von diesem Spielstand auch etwas auf den anderen, zu kopieren. Ich habs nicht so gern wenn durch ein Script wirklich alles geregelt wird, ich brauch von dem Script nur seine Hauptfunktion, den Rest mach ich dann mit Events, auch dass abfragen nach ID's und so würde ich gerne einzeln mit Callscripts in Events machen (Da ich nicht gut Scripten kann, bin ich so nämlich beim Gestalten des Spiels um einiges flexibler, wenn das Script wirklich nur das nötigste macht, also das, was ich nicht mit normalen Events regeln kann).
Also ich persönlich tendire zu der Item-, Actor-, wasauchimmer-ID, da die möglichkeiten zu schummeln so doch ziemlich reduziert sind, allerdings hätte ich auch gerne die Möglichkeit diese ID jederszeit umtauschen zu können, da dies auch von vorteil sein könnte. Wenn's nicht zu viel Aufwand ist.

PS. Ich habs noch nicht ausprobiert, aber funktioniert dein Save-Party Script eigentlich nur beim Standart Kampf System, oder bei jedem, dass die normalen Monstertruppen benutzt?

PPS. Wie lautet eigentlich der Code, um einer Variable Die ID eines bestimmten Gegners im Kampf zuzuweisen?

PPPS. Gibt es auch eine Möglichkeit im Spiel die Encounter Troop und die Steps Everage auf einer Karte, bis man ebendiese verlässt, zu ändern.

Shining Advances
09.08.2009, 22:59
mir ist aufgefallen, dass ich dir noch gar nicht gesagt habe, wie man von ki zu einem menschlichen spieler wechselt :/
mit einem call script

$game_temp.ki = true
schaltest du auf computer gesteuerte gegner und mit

$game_temp.ki = false
auf eine vom spieler gesteuerte.
leider hat der maker nen bug, dass call scripts, die auf = false enden oftmals das spiel zum aufhängen bringen.
probier deshalb besser

$game_temp.ki = false
a = "b"
das soltle wenn möglich direkt vor dem kampf stehen, weil diese einstellung nicht mit gespeichert wird!

außerdem hab ich einen kleinen fehler in meinem script gefunden.
in zeile 430 und 438 muss
[cdoe]if $scene.turn % 2 == 0[/code]
durch

if $scene.turn % 2 == 0 or $game_temp.ki
ersetzt werden.
ansonsten kann es zu fehlern bei der zielauswahl kommen.

@PS
das kann man so nicht sagen.
ich habe einige stellen des standart ks neu schreiben müssen. wenn das andere ks nur das standart ks verändert und meine veränderten stellen nur per alias manipuliert oder sie komplett in ruhe lässt, funktioniert es. ansonsten jedoch nicht.
letztendlich würde ich sagen: probieren geht über studieren ;)

@PPS
falls du die id des gegners in der datanbank meinst:

$game_variables[ID] = $game_troop.enemies[Index].id
ID durch variablen id un index durch den index des gegners ersetzen.
der gegner, der als erstes einer truppe hinzugefügt wurde, hat den index 0,
der 2. hat den index 1 usw.

@PPPS

class Game_Map
def encounter_step=(n)
@map.encounter_step = n
end
def encounter_list=(n)
@map.encounter_list = n
end

$game_map.encounter_step = neuer wert
$game_map.encounter_list = Liste mit IDs
"neuer wert" sollte klar sein ;)
Liste mit IDs wäre zb
[1,4,9]
in diesem fall würde man gegen die erste, vierte oder neunte truppe kämpfen.
du kannst auch per
$game_map.encounter_list.push(ID)
nur eine truppe hinzufügen oder per
$game_map.encounter_list.delete(ID)
eine truppe entfernen.
(Achtung habs nicht getestet, soltle aber funktionieren)


Edit:
Tausch Script:

module Tausch
class <<self
def set_file(name)
name = "Save"+name.to_s+".rxdata" if name.is_a?(Numeric)
@filename = name
return false unless File.exist?(@filename)
file = File.open(@filename, "rb")
@characters = Marshal.load(file)
@count = Marshal.load(file)
@system = Marshal.load(file)
@switches = Marshal.load(file)
@variables = Marshal.load(file)
@selfswitches = Marshal.load(file)
@screen = Marshal.load(file)
@actors = Marshal.load(file)
@party = Marshal.load(file)
@troop = Marshal.load(file)
@map = Marshal.load(file)
@player = Marshal.load(file)
file.close
if @party.spiel_id == $game_player.spiel_id
@characters = nil
@count = nil
@system = nil
@switches = nil
@variables = nil
@selfswitches = nil
@screen = nil
@actors = nil
@party = nil
@troop = nil
@map = nil
@player = nil
return false
end
return true
end
def actors
return @party.actors
end
def get_items(start,ende)
for i in start..ende
$game_variables[i] = @party.item_number(i-start+1)
end
end
def get_item(id)
return @party.item_number(id)
end
def get_armors(start,ende)
for i in start..ende
$game_variables[i] = @party.armor_number(i-start+1)
end
end
def get_armor(id)
return @party.armor_number(id)
end
def get_weapons(start,ende)
for i in start..ende
$game_variables[i] = @party.weapon_number(i-start+1)
end
end
def get_weapon(id)
return @party.weapon_number(id)
end
def get_actors(start,ende)
for i in start..ende
$game_variables[i] = @party.actors[i-start].id
end
end
def trade_actors(sid,oid)
return false if sid >= $game_party.actors.size
return false if oid >= @party.actors.size
return false if inteam?($game_party.actors,@party.actors,oid)
return false if inteam?(@party.actors,$game_party.actors,sid)
trade = $game_party.actors[sid]
$game_party.actors[sid] = @party.actors[oid]
@party.actors[oid] = trade
save
return true
end
def inteam?(party,oparty,oid)
for i in 0...party.size
return true if party[i].id == oparty[oid].id
end
return false
end
def trade_item(sid,oid,sn=1,on=1)
return false if $game_party.item_number(sid) < sn
return false if @party.item_number(oid) < on
$game_party.lose_item(sid,sn)
$game_party.gain_item(oid,on)
@party.lose_item(oid,on)
@party.gain_item(sid,sn)
save
return true
end
def trade_armor(sid,oid,sn=1,on=1)
return false if $game_party.armor_number(sid) < sn
return false if @party.armor_number(oid) < on
$game_party.lose_armor(sid,sn)
$game_party.gain_armor(oid,on)
@party.lose_armor(oid,on)
@party.gain_armor(sid,sn)
save
return true
end
def trade_weapon(sid,oid,sn=1,on=1)
return false if $game_party.weapon_number(sid) < sn
return false if @party.weapon_number(oid) < on
$game_party.lose_weapon(sid,sn)
$game_party.gain_weapon(oid,on)
@party.lose_weapon(oid,on)
@party.gain_weapon(sid,sn)
save
return true
end
def save
file = File.open(@filename, "wb")
characters = []
for i in 0...@party.actors.size
actor = @party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
Marshal.dump(characters, file)
Marshal.dump(@count, file)
Marshal.dump(@system, file)
Marshal.dump(@switches, file)
Marshal.dump(@variables, file)
Marshal.dump(@selfswitches, file)
Marshal.dump(@screen, file)
Marshal.dump(@actors, file)
Marshal.dump(@party, file)
Marshal.dump(@troop, file)
Marshal.dump(@map, file)
Marshal.dump(@player, file)
file.close

name = "Save"+($game_temp.last_file_index+1).to_s+".rxdata"
file = File.open(name, "wb")
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
Marshal.dump($game_system, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_selfswitches, file)
Marshal.dump($game_screen, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_party, file)
Marshal.dump($game_troop, file)
Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
file.close
end
end
end
class Game_Party
def spiel_id
@spiel_id = rand(10000) if @spiel_id.nil?
return @spiel_id
end
def spiel_id=(n)
@spiel_id = n
end
end
funktionen:


Tausch.set_file(name oder id)
name muss der Dateiname sein zb "Save1.rxdata" <- Achtung mit "
id muss die nummer des Speichers sein (normalerweise eine zahl von 1-4)
Wählt den Speicher aus, mit dem getauscht werden soll/von dem die informationen gesammelt werden.
Ich empfehle dir diesen Befehl in der Script option eines conditional branch zu verwenden. wenn der speicher nicht existiert, wird der else zeig ausgeführt. da kannste dann zb ne message mit "Speicher nicht vorhanden" oder so reinsetzen ;)
(Edit: else zweig wird ebenfalls ausgeführt, wenn ID des Spiel = ID des gespeicherten Spiels)


Tausch.get_items(start,ende)
setzt auf die variablen start bis (einschließlich) ende die anzahl der items (fängt immer mit dem item der id 1 an, egal welchen wert start hat).


$game_variables[vID] = Tausch.get_item(iID)
weist der variable vID die anzahl der items mit der ID iID zu.


Tausch.trade_item(eigene_ID,andere_ID,eigene_Menge,andere_Menge)
tauscht eigene_Menge items mit der ID eigene_ID gegen andere_Menge items des anderen Speichers mit der ID andere_ID.
diesen Befehl am besten ebenfalls in einem Conditional Branch benutzen, da der else Zweig ausgeführt wird, wenn einer der beiden nicht genügend items hat.

Diese 3 Item funktionen gibt es natürlich noch für waffen unf rüstungen.
Dazu musst du einfach item durch weapon oder armor ersetzen. (bzw items durch weapons oder armors)


Tausch.get_actors(start,ende)
weist den variablen von start bis (einschließlich) ende die id der helden in der party zu.
nettes Bsp:

@>Script: Tausch.get_actors(1,4)
@>Text: Der Speicher hat die Helden \n[\v[1]], \n[\v[2]],
\n[\v[3]] und \n[\v[4]] in der Party


Tausch.actors
gibt die helden in der party des speichers zurück.
mit Tausch.actors[0].name erhältst du zb den Namen des 1. Helden.
was du sonst noch alles mit anstellen kannst (Eigenschaften etc) kannst du ja in der liste ein paar posts weiter oben lesen.
man sollte vielleicht noch sagen, dass veränderungen an den helden nicht gespeichert werden, bis etwas getauscht wird.
das liegt daran, dass diese option nur für das auslesen von daten ist ;)

nochmal Edit:
mähhh -.-
jetzt hab ich doch glatt dieses sicherungssystem mit der ID vergessen.
werds nochmal rein editen...gleich...wenn ichs gescriptet hab ._.

wieder Edit:
so ist drinne.
allerdings konnte ich es nicht mit der ID für jeden gegenstand machen, weil nur gespeichert wird, wie viele items (auch waffen etc) man von welcher sorte hat.
man kann also nur den gesammten stapel eine ID zuweisen. wäre blöd, wenn zb von allen 10 tränken gesagt wird sie seien von einem anderen spielstand, nur weil man einen einzigen durch nen tausch bekommen hat.
(bzw man kann somit die id des eigenen spielstandes bei items löschen - nicht gerade sicher :/)

über $game_party.spiel_id = neue Zahl kannst du deine id zu testzwecken verändern.

OneEyeShadow
10.08.2009, 14:23
Danke, das Skript funktioniert wirklich gut, aber kannst du nicht auch noch hinzufügen, dass von den Gegnern die HP und SP auch noch sichtbar sind? Denn ich sonst ist der eine Spieler bein einem HotSeat Kampf ziemlich im Nachteil, da er keine Ahnung hat, wie viel HP und SP seine Actors gerade haben.

Oh, und ich hab mal wieder ein paar fragen zu ein paar zeilen Codes, die ich brauche:
1. wie kann ich durch Code die HP/SP eines Actors verändern?
2. kann ich irgendwie per Code die Skills eines Enemies von der Datenbank abfragen und dann in eine Variable speichern?
3. Wie kann ich einem Actor einen Skill per Variable zuweisen?
4. Kann ich irgendwie per Skript die Character Grafik (Ich meine die, die auf der Karte animiert wird) und evtl. auch die andere Grafik eines Actors verändern?
5. Ist es Möglich einen bestimmten Actor eine (besser zwei bzw. drei^^) Variable verändern zu lassen oder ihm einen Skill hinzuzufügen, Parameter, Grafik, States, Klasse und dergleichen zu ändern wenn er bspw. ein bestimmtes Level erreicht oder auch einen Skill ausführt oder irgendeines seiner Parameter einen bestimmten Wert erreicht oder irgendein Switch umgelegt ist oder so, also ich meine irgendwie direkt, so dass das auch mit diesem CopyActor Skrypt mitkopiert werden könnte, und ich kein Commen event auf Parallel Proces zu heben brauche.

PS. Irgendwie funktioniert das mit dem Encounter umändern bei mir nicht so richtig ...

Shining Advances
10.08.2009, 21:05
die anzeige unten sollte eigentlich wechseln, sobald der andere spieler am zug ist.


1)
kommt darauf an, ob die die maximalen hp/sp meinst oder die aktuellen:
$game_actors[ID].maxhp = wert
$game_actors[ID].maxsp = wert
$game_actors[ID].hp = wert
$game_actors[ID].sp = wert


2)
gegner besitzen keine skills sondern nur aktionen. deshalb muss man jede aktion abfragen, ob sie einen skill ausführt


skills = []
for action in $data_enemies[ID].actions
if action.kind == 1
skills.push(action.skill_id)
end
end
$game_variables[vID] = skills[nr].to_i
ID -> ID des gegners
vID -> ID der variable
nr -> der wievielte skill des gegners (fängt bei 0 an)

3)
$game_actors[ID].learn_skill($game_variables[vID])


4)

$game_actors[ID].set_graphic("character grafik",character hue,"battler grafik", battler hue)
$game_player.refresh
hue ist diese veränderung der farben. hat nen wert zwischen 0-255
bei den grafik namen an die " denken!

wenn du bei Game_Actor vor character_name (zeile 13) das attr_reader durch attr_accessor ersetzt, aknnst du per

$game_actors[ID].character_name = "grafikname"
$game_player.refresh
kannst du direkt die lauf grafik eines helden ändern.

($game_player.refresh sorgt dafür, dass die änderung auf der karte sichtbar wird, wenn der held an 1. position in der party ist.)

5)
am einfachsten wäre es bei Game_Actor hinter zeile 468
(also nach
learn_skill(j.skill_id)
end
end)
folgendes einzufügen:

if self.name == "Helden Name"
if self.eigenschaft == wert
self.eigenschaft = neuer wert
end
end
Bsp:

if self.name == "Arshes"
if self.dex == 100
self.int = 200
end
end
in diesem beispiel würde der held arshes, sobald seine dexterity (heißt das so?) 100 erreicht einen intelligenz wert von 200 erhalten.
diese abfrage geschiht nur bei einem level up (davon ausgehend, dass nur dann sich seine werte verändern)
du kannst danach das selbe einfach nochmal mit anderen helden namen einfügen, falls noch bei anderen eigenschaften verändert werden sollen.

un wegen dem encounter...ich hab aus versehen am ende ein end vergessen.
korrigierte version:

class Game_Map
def encounter_step=(n)
@map.encounter_step = n
end
def encounter_list=(n)
@map.encounter_list = n
end
end


PS:
fahre morgen für 3 tage weg.
falls es also noch was gibt, musst du hoffen, dass jemand anderes hilft oder geduldig sein :)

OneEyeShadow
12.08.2009, 14:05
Danke für den Code, kannst du mir nochmal erklären, wie das mit dem Encounter gemacht werden muss, bei mir kommt da immer ne Fehlermeldung.
Achja, bei deinem Save_Party Script hab ich nen kleinen Bug entdeckt, wenn man einen normalen Kampf gewinnt setzt es das Level aller Kämpfer wieder auf eins, und anstatt EXP zu bekommen, verlieren sie alle EXP, die sie hatten.

Edit: Kannst du noch das normale Menü so verändern, dass man statt den Map Grafiken die Battler Grafiken der Actors sieht (auch bei den ganzen untermenüs).

Und kannst du das Battle Script so verändern, dass man immer nur mit einer bestimmten (durch eine Variable bestimmt) Anzahl an Actors gleichzeitig kämpfen kann, und sobald einer von diesen Tod ist in ein auswahlfenster wechselt, wo man einen anderen Actor (Mit Battler Graphic) aus der Party auswählen kann der dann weiterkämpft, also mit dem, der KO ist ausgetauscht wird, und dementsprechend auch die Funktionen von Skills und Items, die als Ziel One Ally haben entsprechend funktionieren lässt, und das man dann Game Over ist, wenn alle Party Member KO sind, und wenn du eine Anzeige für die Gegnerischen HP, SP und einen bestimmten Wert reinbaust, die man per Switch ein und ausschalten kann?


Ich weiß, dass ist etwaaaas viel, aber für mein Aktuelles Project brauche ich diese Scripts, ich würde mich wirklich freuen, wenn du die scripten könntest.

sPike.
12.08.2009, 14:32
was denn fürne fehlermeldung....

OneEyeShadow
12.08.2009, 15:58
Das übliche: "Syntax error occurred while running Script", oder so ähnlich.

Das liegt warscheinlich daran, dass ich nicht so genau weiß, wie ich das verwenden muss ...

sPike.
12.08.2009, 21:07
ja einfach im callscript sowas schreiben
$game_map.encounter_step = 100 # jett kommen wenig gegner
oder
$game_map.encounter_list = [1,2,3] # jetzt kommen die ersten drei troops

musst nur auf den zeilenumbruch achten,
nicht das sowas passiert:

$game_map.encounter_list = [1,2
,3]
#sondern sowas
$game_map.encounter_list =
[1,2,3]
#oder sowas
$game_map.encounter_list = [1,2,
3,4,5,6,7,8,9,12,22,33,
44]
das komma darf nie am anfang einer zeile stehen

Shining Advances
14.08.2009, 11:14
machst du ein pokemon spiel? (das mim im kampf austauschen kommt mir so bekannt vor^^)
war deine frage, ob das script auch mit anderen ks funktioniert auf das pokemon starterkit bezogen?

wie auch immer....
das mit dem austauschen sollte nicht zu schwer sein. (soll der gegner eigentlich auch austauschen?)
allerdings weiß ich noch nicht so recht, wie ich das mit dem multiplayer ermöglichen soll.
gib mir ein bisschen zeit^^

bezüglich exp
du musst folgendes aus dem kampf script löschen:

def exp
return EXP
end
müsste in zeile 322-324 sein.
danach musst du folgendes am ende hinzufügen:

class Game_Battler
def wexp
return exp
end
end
class Game_Actor
def wexp
return EXP
end
end

und in scene_battle 2 in zeile 149

exp += enemy.exp
durch
exp += enemy.wexp ersetzen.

bezüglich grafiken:
Window_Base zeile 108-114 mit folgendem ersetzen

def draw_actor_graphic(actor, x, y)
bitmap = RPG::Cache.battler(actor.character_name, actor.character_hue)
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x - cw / 4, y - ch / 2, bitmap, src_rect)
end
aber bedenke, dass die grafiken jetzt nicht mehr 100% rein passen!

OneEyeShadow
14.08.2009, 14:17
Hallo Shining Advances, wieder zurück?



machst du ein pokemon spiel? (das mim im kampf austauschen kommt mir so bekannt vor^^)
war deine frage, ob das script auch mit anderen ks funktioniert auf das pokemon starterkit bezogen?

Ich mach so was ähnliches, ohne Pokemon, aber mit gewissen anderen Monstern, aber meine Frage auf das Kampfskript war aus reiner neugier.


das mit dem austauschen sollte nicht zu schwer sein. (soll der gegner eigentlich auch austauschen?)

Ja, sollte er schon, aber am besten wärs, wenn er das nach zufallsprinzip oder über eine festgelegte reienfolge macht, und wenn alle Enemies x und y Koordinaten dann über Variablen bestimmt werden würden und wenn man per Variable die Anzahl der gleichzeitig aktiven Battler (beider seiten) bestimmen könnte ...


bezüglich grafiken:
Window_Base zeile 108-114 mit folgendem ersetzen
Ah, danke, jetzt habe ich das Problem auch nicht mehr, danke.

PS: Das Spiel, das ich gerade am makern bin kannst du dir, wenn du lust hast, oder neugierig bist, hier (http://npshare.de/files/8f7a51f8/Digimon.exe) mal ansehen, evtl. (eher: ganzbestimmt) findest du dazu ja noch ein paar Verbesserungsvorschläge.