Chaos Project

RPG Maker => RPG Maker Scripts => Script Troubleshooting => Topic started by: G_G on June 13, 2009, 06:20:10 pm

Title: [XP] Summoning Script
Post by: G_G on June 13, 2009, 06:20:10 pm
Ok I'm making a summoning/capturing script for my game and I am in need of help...

class Scene_Battle
  alias remove_summoned_monsters update_phase5
  def update_phase5
    for i in 0...$capture.smonsters.size
      $capture.smonsters.delete(i)
      $game_party.remove_actor(i)
    end
    remove_summoned_monsters
  end
end


I can summon monsters just fine and it adds the id of the summon into $capture.smonsters now my problem is in the above code. I want the summons to be removed from the party at the end of every battle and it doesnt remove them. Is something wrong with my code?
Title: Re: [XP] Summoning Script
Post by: Ryex on June 13, 2009, 06:25:02 pm
print $capture.smonsters for me you may need to screen shot the print window
   
Title: Re: [XP] Summoning Script
Post by: Seox on June 18, 2009, 03:18:43 pm
Quote from: game_guy on June 13, 2009, 06:20:10 pm
Ok I'm making a summoning/capturing script for my game and I am in need of help...

class Scene_Battle
 alias remove_summoned_monsters update_phase5
 def update_phase5
   for i in 0...$capture.smonsters.size
     $capture.smonsters.delete(i)
     $game_party.remove_actor(i)
   end
   remove_summoned_monsters
 end
end


I can summon monsters just fine and it adds the id of the summon into $capture.smonsters now my problem is in the above code. I want the summons to be removed from the party at the end of every battle and it doesnt remove them. Is something wrong with my code?



maybe I'm wrong, but, when you do this:


class Scene_Battle
 alias remove_summoned_monsters update_phase5
 def update_phase5
   for i in 0...$capture.smonsters.size
     $capture.smonsters.delete(i)
     $game_party.remove_actor(i)
   end
   remove_summoned_monsters
 end
end


for i in 0... blah blah
That means that "i" is a number. $capture.smonsters.delete(i)....you're deleting a number, right? Not a monster? Unless the monster "goes by" the number. In order for that to work, you'd have to go
for i in $capture.smonsters
$capture.smonsters.delete(i)
end



EDIT:

Never mind, I've got one better. Change .delete to .delete_at, then tell me what happens. I think that'll solve your problem.

EDIT AGAIN: Ok, just saw another problem. Try using this instead:



class Scene_Battle
 alias remove_summoned_monsters update_phase5
 def update_phase5
   for i in 0...$capture.smonsters.size
     $capture.smonsters.delete_at(i)
        index = $game_party.index($capture.smonsters(i))
     $game_party.remove_actor(index)
   end
   remove_summoned_monsters
 end
end



Plus, you were trying to delete the monster in the party at the same index as the captured ones. If you had ANY others in the party, it'd delete the wrong one. That's why I gave you that ^^^.
Title: Re: [XP] Summoning Script
Post by: Ryex on June 18, 2009, 04:16:31 pm
Um seox did you even LOOK at the game party class? because his code is right, it SHOULD work, the only two things i see that might be wrong is that he isn't storing what he thinks he's storing, or they're are being added back after he removes them.
Title: Re: [XP] Summoning Script
Post by: Seox on June 18, 2009, 04:21:27 pm
Quote from: Ryexander on June 18, 2009, 04:16:31 pm
Um seox did you even LOOK at the game party class? because his code is right, it SHOULD work, the only two things i see that might be wrong is that he isn't storing what he thinks he's storing, or they're are being added back after he removes them.


My thinking is that his code SHOULD work, but isn't, because something in the code is should or shouldn't be there that isn't. I'm just trying to suggest something that I think will help, due to the nature of the class.

I just looked at it, and, you're right. I'm used to, say, referencing the party using $game_party.actors, which would return the actor in that position. The remove_actor method goes by ID, which works fine. I still think that the top bit of code, with delete_at would work. Just thinking. Thanks for the correction, Ryex. ^_^

I agree with you in saying that he probably isn't storing what he thinks he is, in that the things held in $capture.smonsters are probably not numbers, which is what he's deleting from the array. He's wanting to delete each one using the for loop, which goes through the numbers 0 to the amount of monsters. Therefore, I assume that, on each iteration, he wants to delete the respective monster. He's deleting anything in the array which is equal to i, which is a number. To delete the ones which are in that position, he needs .delete_at.


So, GG, try this:

class Scene_Battle
 alias remove_summoned_monsters update_phase5
 def update_phase5
   for i in 0...$capture.smonsters.size
     $capture.smonsters.delete_at(i)
     $game_party.remove_actor(i)
   end
   remove_summoned_monsters
 end
end