Demon Newbie
Posts : 3 Thanked : 0 Engine : RMVX Skill : Very Beginner Type : Artist
| Subyek: [REQ] Script 2011-02-11, 07:30 | |
| kk buatkan Script "Auto Weapon" Contoh : di Note Weapon kalo saya tulis "sword" terus testplay Serang enemy Gambar swordnya lg nyerang, pokok e kek Vampyr Sbabs tapi jgn pakai Icon tp pake "graphic", kalo engga kaka edit" aja Script ini - Spoiler:
- Code:
-
#============================================================================== # Composite Characters / Visual Equipment # Version 1.2b # Author: modern algebra (rmrk.net) # Date: December 5, 2009 # Original Release Date: July 5, 2008 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Instructions: # # Place this script in between Materials and Main in the Script Editor # # Basically, to work this script you need to do two things. 1) Setup your # actors default character sets - you will see a full set of instructions at # line xx. Now, to set a graphic for an armor or weapon, all you need to do # is place this code in the Notes box of the item: # # \CG[<Name of Character Set>, <index in character set>, <hue>, <z>] # # If you leave out index, it defaults to 0 and if you leave out hue, it also # defaults to 0. You can put more than one graphic to an armor or weapon and # they will stack by priority (z). Things with lower priority are drawn first. # # Setting up an Event is similar - all you need to do is place a comment at # the very beginning of the event and put in the same code to generate a # composite character set for the event. Same rules apply, and remember, you # can stack character sets. # # EXAMPLES: # \cg[Actor1, 2] # Character Set = Actor1 : index = 2 : hue = 0 : z = 0 # \CG[Evil] # Character Set = Evil : index = 0 : hue = 0 : z = 0 # \cG[Actor2, 3, 50, 2] # Character Set = Actor2 : index = 3 : hue = 50 : z = 2 # # You can now remove and add graphics to the actor using the following codes # in a script call: # # remove_graphic_from_actor (actor_id, index) # remove_graphic_from_actor (actor_id, graphic_name, graphic_index, graphic_hue) # add_graphic_to_actor (actor_id, graphic_name, graphic_index, graphic_hue, index) # # where: # actor_id : the ID of the actor whose graphic you are changing # index : the index of the graphic in the actor's composite_character # graphic_name : the name of the character set # graphic_index : the index of the character file in the set # graphic_hue : the hue of the graphic # # Also, the Change Actor Graphic event command now adds character sets to # the current set. You can clear an actor's character set with the code: # # clear_character_graphic (actor_id) #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Compatibility: # # Unfortunately, I did need to overwrite some methods for this script, and # as such there are likely to be compatibility problems. I know that my # Extra Movement Frames Script certainly will not work with this script, and # any script that tampers with the way a character set is drawn will also # likely encounter problems. Now, this is not to say that any script that # draws a character set will be incompatible - as long as that scripter uses # the draw_actor_graphic method of Window_Base it should work fine - it is # only scripts that change the way a character set is drawn that will cause # problems. Also, I tamper with the load_gamedata method of Window_SaveFile, # and so if another script overwrites that then there will again be # compatibility issues. If you find a script that seems to cause problems, # please post at the topic at rmrk.net and I will try my best to assist you. # # Diedrupo's Caterpillar Script does not work immediately. A fix is posted # in this script's topic at rmrk.net. # Tankentai Sideview Battle System will not use composite character sprites # without a fix. That fix is also posted in this script's topic at rmrk.net #==============================================================================
#============================================================================== # *** module Cache #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # new method - composite_character #==============================================================================
module Cache #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Composite Character # char_array : An array holding the names of all parts of a graphic #`````````````````````````````````````````````````````````````````````````` # Composes a single character bitmap out of all the ones given. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def self.composite_character (char_array) @cache = {} if @cache == nil # Blank bitmap if there is nothing in the array. @cache[char_array] = Bitmap.new (32, 32) if char_array.empty? # If not in the cache if !@cache.include? (char_array) || @cache[char_array].disposed? # Create a template bitmap bitmap = Bitmap.new (32, 32) # Add in all other graphics char_array.each { |i| name, index, hue = i[0], i[1], i[2] # Bypass self.character in order to allow for setting hue bmp = load_bitmap ("Graphics/Characters/", name, hue) sign = name[/^[\!\$]./] # Get the width and height of the single character if sign != nil && sign.include? ('$') wdth, hght = bmp.width, bmp.height else wdth = bmp.width / 4 hght = bmp.height / 2 end # Expand bitmap if necessary if bitmap.width < wdth || bitmap.height < hght # Recreate bitmap temp_bmp = bitmap.dup bitmap = Bitmap.new ([temp_bmp.width, wdth].max, [temp_bmp.height, hght].max) bitmap.blt (0, 0, temp_bmp, temp_bmp.rect) temp_bmp.dispose end # Draw new character graphic onto bitmap src_rect = Rect.new ((index%4)*wdth, (index/4)*hght, wdth, hght) bitmap.blt (0, 0, bmp, src_rect) } @cache[char_array] = bitmap end return @cache[char_array] end end
#============================================================================== # ** RPG::BaseItem #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # new method - character_graphics #==============================================================================
class RPG::BaseItem #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Character Graphics #`````````````````````````````````````````````````````````````````````````` # Retrieves Character Graphics from Note Field #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def character_graphics graphics = [] # Retrieve Note Field text = self.note.dup while text.sub! (/\\cg\[([^,\]]+),*\s*(\d*),*\s*(\d*),*\s*(\d*)\]/i) { '' } != nil a = [$1.to_s, ($2 != nil ? $2.to_i : 0), ($3 != nil ? $3.to_i : 0), ($4 != nil ? $4.to_i : 0)] graphics.push (a) end return graphics end end
#============================================================================== # ** Game_Actor #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # new methods - composite_character, clear_character # aliased methods - initialize, change_equip, set_graphic # new public instance variables - ma_composite_character, ma_return_composite #==============================================================================
class Game_Actor #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Public Instance Variable #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ attr_accessor :ma_composite_character attr_accessor :ma_return_composite #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Object Initalization #````````````````````````````````````````````````````````````````````````` # Initializes stacked_character variable #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias modalg_arclght_vsual_equip_init_4t6h initialize def initialize (id) # Run Original Method modalg_arclght_vsual_equip_init_4t6h (id) @ma_composite_character = [] @ma_return_composite = false case @actor_id #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ # EDITABLE REGION #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| # An actor will automatically have whatever you set in the database # as a bottom layer for him, but if you need to have other character # sets piled on top, then put them in this format: # # when <actor_id> # @ma_composite_character.push (['graphic_name', index, hue, z]) # *for as many graphics as you want - first ones drawn first. If you # want to know what each is, see the Instructions in the header. # The z value allows you to set priority. So, something with -1 # z will be drawn below anything with a greater z value #///////////////////////////////////////////////////////////////////// when 1 # 1st Actor # Create Hair Sprite @ma_composite_character.push (['VisEquipSample', 1, 100]) when 3 # 3rd Actor # Create skin sprite with different hue @ma_composite_character.push (['VisEquipSample', 0, 20]) # Create Hair Sprites @ma_composite_character.push (['VisEquipSample', 2, 75]) @ma_composite_character.push (['VisEquipSample', 3, 75]) #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ # END EDITABLE REGION #///////////////////////////////////////////////////////////////////// end @ma_composite_character.each { |i| i[1] = 0 if i[1] == nil i[2] = 0 if i[2] == nil i[3] = 0 if i[3] == nil } @ma_composite_character.unshift ([@character_name, @character_index, 0, -1]) if @character_name != '' end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Get Composite Character #`````````````````````````````````````````````````````````````````````````` # Returns Graphic Array for the actor #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def composite_character armor_graphics = [] weapon_graphics = [] # Body Armor, then Helmet, then Shield, then all others dup_armors = armors.dup for i in 0...2 j = 2 - i armor_graphics += dup_armors[j].character_graphics if dup_armors[j] != nil dup_armors.delete_at (j) end # If there is some multi-equip script, will get accessories and rest in order dup_armors.each { |armr| armor_graphics += armr.character_graphics if armr != nil } weapons.each { |wpn| weapon_graphics += wpn.character_graphics if wpn != nil } cg = @ma_composite_character + armor_graphics + weapon_graphics cg.sort! { |a, b| a[3] <=> b[3] } return cg end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Change Graphics # character_name : new character graphic filename # character_index : new character graphic index # face_name : new face graphic filename # face_index : new face graphic index #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias ma_cgve_st_grphic_evnt_6ht3 set_graphic def set_graphic(character_name, character_index, face_name, face_index) old_char_name, old_char_index = @character_name, @character_index # Run Original Method ma_cgve_st_grphic_evnt_6ht3 (character_name, character_index, face_name, face_index) # Find old character name count = 0 @ma_composite_character.each { |char| count += 1 break if char[0] == old_char_name && char[1] == old_char_index } # Put in new character directly after old one @ma_composite_character.insert (count, [@character_name, @character_index, 0, -1]) $game_player.refresh end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Clear Graphic #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def clear_graphic @ma_composite_character.clear @ma_composite_character.push ([@character_name, @character_index, 0, -1]) end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Character Name #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias modrnalgbra_comp_char_retrn_charctrnm_6gd4 character_name def character_name # If asking for composite character, return it instead if @ma_return_composite @ma_return_composite = false return self.composite_character end return modrnalgbra_comp_char_retrn_charctrnm_6gd4 end end
#============================================================================== # ** Game_Character #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # new instance variable - composite_character #==============================================================================
class Game_Character #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Public Instance Variables #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ attr_reader :composite_character end
#============================================================================== # ** Game_Event #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # aliased methods - setup #==============================================================================
class Game_Event #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Event page setup #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias malgbr_rclgh_req_comp_char_setup_5msk setup def setup(new_page) malgbr_rclgh_req_comp_char_setup_5msk (new_page) # Create Composite Character @composite_character = [] @composite_character.push ([@character_name, @character_index, 0, -1]) unless @character_name.nil? # If page == nil, return return if @page == nil # Retrieve first line comments comments = [] @page.list.each { |i| i.code == 108 || i.code == 408 ? comments.push (i) : break } # Evaluate comments for \CG codes comments.each { |i| text = i.parameters[0].dup while text.sub! (/\\cg\[([^,\]]+),*\s*(\d*),*\s*(\d*),*\s*(\d*)\]/i) { '' } != nil a = [$1.to_s, ($2 != nil ? $2.to_i : 0), ($3 != nil ? $3.to_i : 0), ($4 != nil ? $4.to_i : 0)] @composite_character.push (a) end } # Sort Composite Characters by z value. @composite_character.sort! { |a, b| a[3] <=> b[3] } end end
#============================================================================== # ** Game_Player #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # aliased method - refresh #==============================================================================
class Game_Player #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Refresh #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias mdalg_arc_comp_character_find_rfrsh_8kwi refresh def refresh mdalg_arc_comp_character_find_rfrsh_8kwi return if $game_party.members.empty? @composite_character = $game_party.members[0].composite_character end end
#============================================================================== # ** Game_Interpreter #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # new method - clear_character_graphic #==============================================================================
class Game_Interpreter #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Clear Character Graphic # actor_id : the ID of the actor to be cleared #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def clear_character_graphic (actor_id) $game_actors[actor_id].clear_graphic $game_player.refresh end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Remove Graphic From Character # actor_id : the ID of the actor #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def remove_graphic_from_actor (actor_id, *args) actor = $game_actors[actor_id] if args[0].is_a? (Integer) index = args[0] else index = 0 # Find index of the specified character set for composite in actor.ma_composite_character if (args[0] != nil || args[0] == composite[0]) && (args[1] != nil || args[1] == composite[1]) && (args[2] != nil || args[2] == composite[2]) break end index += 1 end end # Delete graphic from array actor.ma_composite_character.delete_at (index) $game_player.refresh return index end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Add Graphic To Character # actor_id : the ID of the actor # char_name, char_index, char_hue : character graphic specifications # index : where to insert the new graphic #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def add_graphic_to_actor (actor_id, char_name, char_index = 0, char_hue = 0, z = 0, index = nil) actor = $game_actors[actor_id] index = actor.ma_composite_character.size if index.nil? actor.ma_composite_character.insert (index, [char_name, char_index, char_hue, z]) $game_player.refresh end end
#============================================================================== # ** Sprite_Character #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # aliased method - update_bitmap #==============================================================================
class Sprite_Character #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Update Transfer Origin Bitmap #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias modern_alg_arclightrequest_visual_equip_bmp_update update_bitmap def update_bitmap if @tile_id != @character.tile_id or @character_name != @character.character_name or @character_index != @character.character_index || @composite_character != @character.composite_character @tile_id = @character.tile_id @character_name = @character.character_name @character_index = @character.character_index @composite_character = @character.composite_character if @tile_id > 0 sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32; sy = @tile_id % 256 / 8 % 16 * 32; self.bitmap = tileset_bitmap(@tile_id) self.src_rect.set(sx, sy, 32, 32) self.ox = 16 self.oy = 32 else if @composite_character == nil # Regular Character Picture self.bitmap = Cache.character(@character_name) sign = @character_name[/^[\!\$]./] if sign != nil and sign.include?('$') @cw = bitmap.width / 3 @ch = bitmap.height / 4 else @cw = bitmap.width / 12 @ch = bitmap.height / 8 end else self.bitmap = Cache.composite_character(@composite_character) @cw = self.bitmap.width / 3 @ch = self.bitmap.height / 4 end self.ox = @cw / 2 self.oy = @ch end end end #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Update Transfer Origin Rectangle #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def update_src_rect if @tile_id == 0 index = 0 pattern = @character.pattern < 3 ? @character.pattern : 1 sx = (index % 4 * 3 + pattern) * @cw sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch self.src_rect.set(sx, sy, @cw, @ch) end end end
#============================================================================== # ** Window_Base #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # overwritten method - draw_character_graphic #==============================================================================
class Window_Base #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Draw Actor Walking Graphic # actor : actor or comp character array # x : draw spot x-coordinate # y : draw spot y-coordinate #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def draw_actor_graphic(actor, x, y) composite_character = actor.is_a? (Array) ? actor : actor.composite_character bitmap = Cache.composite_character (composite_character) cw = bitmap.width / 3 ch = bitmap.height / 4 rect = Rect.new (cw, 0, cw, ch) self.contents.blt (x - (cw / 2), y - ch, bitmap, rect) end end
#============================================================================== # ** Window_SaveFile #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # overwritten_methods - draw_party_characters #==============================================================================
class Window_SaveFile < Window_Base #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Draw Party Characters # x : Draw spot X coordinate # y : Draw spot Y coordinate #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ def draw_party_characters(x, y) for i in 0...@characters.size draw_actor_graphic (@characters[i][0], x + i * 48, y) end end end
#============================================================================== # ** Scene_File #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # aliased method - write_save_data #==============================================================================
class Scene_File #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Write Save Data #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias modrnbra_wrt_svdata_comp_chactes_63gb5 write_save_data def write_save_data (*args) # Set it to return composite characters $game_party.members.each { |actor| actor.ma_return_composite = true } # Run Original Method modrnbra_wrt_svdata_comp_chactes_63gb5 (*args) end end
#============================================================================== # ** Scene_Equip (For compatibility with KGC #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Summary of Changes: # aliased method - terminate #==============================================================================
class Scene_Equip #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * Terminate # updates game_player equipment #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alias modalg_trmnte_cg_equipment_k8g9c terminate def terminate # RUn Original Method modalg_trmnte_cg_equipment_k8g9c $game_player.refresh end end
Script ini kan buat Armor saya maunya weapon .. Please Bantu ... | |
|