Inventarscript
Hey Leute!
Ich suche nach einem Inventarscript das jedes einzelne Item in einen eigenes Kästchen gibt.
Beispiel:
Gibt es sowas? Ich hab die Sufu benutzt aber nichts gefunden.
Liegt villeicht an meinen suchbegriffen ^^
Oder könnte jemand sowas erstellen wenn es nicht zuviel arbeit macht?
mfg
Ich suche nach einem Inventarscript das jedes einzelne Item in einen eigenes Kästchen gibt.
Beispiel:
Gibt es sowas? Ich hab die Sufu benutzt aber nichts gefunden.
Liegt villeicht an meinen suchbegriffen ^^
Oder könnte jemand sowas erstellen wenn es nicht zuviel arbeit macht?
mfg
Ich hab noch keine bestimmten Grafiken.
Aber es sollten halt 32x32 felder sein (wo die items angezeigt werden)
Die Breite wird sein 280 und 380.
Ich hoffe das reicht als angabe, aber ich werde versuchen grafiken schon mal zu machen
Aber es sollten halt 32x32 felder sein (wo die items angezeigt werden)
Die Breite wird sein 280 und 380.
Ich hoffe das reicht als angabe, aber ich werde versuchen grafiken schon mal zu machen
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kutzlor« (31. Oktober 2010, 07:52)
|
|
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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 |
module IG
MAIN_FRAME=RPG::Cache.picture("mainFrame.png"); # Hauptfenster Grafik.
# Main window graphic.
ITEM_FRAME_WIDTH=32;
ITEM_FRAME_HEIGHT=32;
MAP=true; # Zeige Map im hintergrund an.
# Show map in background.
BORDER=5;
TITLE="Inventar";
end
class Spriteset_Map
attr_reader :viewport3
end
class IData
# 00 00 FF ID
# 00 FF 00 NUM
# FF 00 00 TYPE
attr_reader :xSize, :ySize, :items
def initialize()
@xSize=((IG::MAIN_FRAME.height-IG::BORDER) / (IG::ITEM_FRAME_HEIGHT+IG::BORDER)).round;
@ySize=((IG::MAIN_FRAME.width-IG::BORDER) / (IG::ITEM_FRAME_WIDTH+IG::BORDER)).round;
@items=Array.new(@xSize*@ySize);
end
def addItem(item_id,item_num)
return add(0,item_id,item_num);
end
def addWeapon(item_id,item_num)
return add(1,item_id,item_num);
end
def addArmor(item_id,item_num)
return add(2,item_id,item_num);
end
def add(item_type,item_id,item_num)
for i in 0...@items.size
if @items[i] != nil and (@items[i] & 0x0000FF) == item_id and
((@items[i] & 0xFF0000) >> 16) == item_type
new_num=((@items[i] & 0x00FF00) >> 8)+item_num;
@items[i]=(item_type << 16 | new_num << 8 | item_id);
return true;
end
end
for i in 0...@items.size
if @items[i] == nil
@items[i]=(item_type << 16 | item_num << 8 | item_id);
return true;
end
end
return false;
end
def removeItem(item_id,item_num)
return remove(0,item_id,item_num);
end
def removeWeapon(item_id,item_num)
return remove(1,item_id,item_num);
end
def removeArmor(item_id,item_num)
return remove(2,item_id,item_num);
end
def remove(item_type,item_id,item_num)
for i in 0...@items.size
if @items[i] != nil and (@items[i] & 0x0000FF) == item_id and
((@items[i] & 0xFF0000) >> 16) == item_type
new_num=((@items[i] & 0x00FF00) >> 8)-item_num;
if new_num <= 0
@items[i]=nil;
return true;
end
@items[i]=(item_type << 16 | new_num << 8 | item_id);
return true;
end
end
return false;
end
def removeAllItem(item_id)
return removeAll(0,item_id);
end
def removeAllWeapon(item_id)
return removeAll(1,item_id);
end
def removeAllArmor(item_id)
return removeAll(2,item_id);
end
def removeAll(item_type,item_id)
for i in 0...@items.size
if @items[i] != nil and (@items[i] & 0x0000FF) == item_id and
((@items[i] & 0xFF0000) >> 16) == item_type
@items[i]=nil;
break;
end
end
end
def hasItem?(item_id)
return has?(0,item_id);
end
def hasWeapon?(item_id)
return has?(1,item_id);
end
def hasArmor?(item_id)
return has?(2,item_id);
end
def has?(item_type,item_id)
return (get_num(item_type,item_id) > 0);
end
def getItem(x,y)
return @items[(x % xSize)*(y/xSize)];
end
def getItemID(x,y)
return (getItem(x,y) & 0x0000FF);
end
def getItemNum(x,y)
return ((getItem(x,y) & 0x00FF00) >> 8);
end
def getItemType(x,y)
return ((getItem(x,y) & 0xFF0000) >> 16);
end
def get(item_id)
for i in 0...@items.size
if (@items[i] & 0x0000FF) == item_id
return @items[i];
end
end
0;
end
def getNum(item_type,item_id)
for i in 0...@items.size
if (@items[i] & 0x0000FF) == item_id and#
((@items[i] & 0xFF0000) >> 16) == item_type
return ((@items[i] & 0x00FF00) >> 8);
end
end
0;
end
end
class Scene_Save
unless method_defined?(:a31102010)
alias :a31102010 :write_save_data
end
def write_save_data(file)
a31102010(file);
Marshal.dump($iData, file);
end
end
class Scene_Load
unless method_defined?(:b31102010)
alias :b31102010 :read_save_data
end
def read_save_data(file)
b31102010(file);
$iData=Marshal.load(file);
end
end
class Inventar
def initialize(x,y)
if IG::MAP
@background=Spriteset_Map.new();
end
@windowBack = Sprite.new(@background.viewport3);
@windowBack.bitmap=IG::MAIN_FRAME;
@windowBack.x=x+IG::BORDER;
@windowBack.y=y+IG::BORDER*2;
@windowMainSelect = WindowMainSelect.new(x,y,IG::MAIN_FRAME.width+32,IG::MAIN_FRAME.height+32);
@target_window = Window_Target.new
@target_window.visible = false
@target_window.active = false
end
def main()
Graphics.transition();
loop do
if $scene != self
break;
end
Graphics.update();
Input.update();
update();
end
Graphics.freeze();
@windowBack.dispose();
@windowMainSelect.dispose();
@target_window.dispose();
if IG::MAP
@background.dispose();
end
end
def update()
if IG::MAP
@background.update();
end
@windowBack.update();
@windowMainSelect.update();
@target_window.update
if @windowMainSelect.active
update_item();
end
if @target_window.active
update_target();
end
end
def item_can_use?(item_id)
if (($iData.get(item_id) & 0xFF0000) >> 16) != 0
return false;
end
occasion = $data_items[item_id].occasion
if $game_temp.in_battle
return (occasion == 0 or occasion == 1)
end
return (occasion == 0 or occasion == 2)
end
def update_item
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
@item = @windowMainSelect.getChoosenItem();
unless item_can_use?(@item.id)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
if @item.scope >= 3
@windowMainSelect.active = false
@target_window.x = 304
@target_window.visible = true
@target_window.active = true
if @item.scope == 4 || @item.scope == 6
@target_window.index = -1
else
@target_window.index = 0
end
else
if @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$game_system.se_play(@item.menu_se)
if @item.consumable
$iData.remove((($iData.items[@windowMainSelect.index] & 0xFF0000) >> 16),@item.id, 1)
@windowMainSelect.draw_item(@windowMainSelect.index)
end
$scene = Scene_Map.new
return
end
end
return
end
end
def update_target
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
unless item_can_use?(@item.id)
@windowMainSelect.refresh
end
@windowMainSelect.active = true
@target_window.visible = false
@target_window.active = false
return
end
if Input.trigger?(Input::C)
if (($iData.items[@windowMainSelect.index] & 0x00FF00) >> 8)== 0
$game_system.se_play($data_system.buzzer_se)
return
end
if @target_window.index == -1
used = false
for i in $game_party.actors
used |= i.item_effect(@item)
end
end
if @target_window.index >= 0
target = $game_party.actors[@target_window.index]
used = target.item_effect(@item)
end
if used
$game_system.se_play(@item.menu_se)
if @item.consumable
$iData.remove((($iData.items[@windowMainSelect.index] & 0xFF0000) >> 16),@item.id, 1)
@windowMainSelect.draw_item(@windowMainSelect.index)
end
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
return
end
if @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$scene = Scene_Map.new
return
end
end
unless used
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
class WindowMainSelect < Window_Selectable
def initialize(x,y,width,height)
super(x,y,width,height);
@item_max = $iData.ySize*($iData.xSize-1);
@column_max = $iData.xSize-3;
self.contents=Bitmap.new(width-32,height-32);#IG::MAIN_FRAME
self.opacity=0;
self.z+=5500
@index=0;
refresh();
end
def refresh()
self.contents.clear();#IG::MAIN_FRAME
self.contents.draw_text(0, 0, width-32, 32, IG::TITLE, 1);
for i in 0...$iData.items.size
draw_item(i);
end
end
def getChoosenItem()
return getItem(@index);
end
def getItem(i)
itemD = $iData.items[i];
return nil if itemD==nil
case ((itemD & 0xFF0000) >> 16)
when 0 # Item
item=$data_items[(itemD & 0x0000FF)];
when 1 # Weapon
item=$data_weapons[(itemD & 0x0000FF)];
when 2 # Shield
item=$data_armors[(itemD & 0x0000FF)];
end
return item;
end
def draw_item(i)
item = getItem(i)
return if item==nil;
x = IG::BORDER*(i % @column_max+1) + i % @column_max * IG::ITEM_FRAME_WIDTH;
y = IG::BORDER*(i / @column_max+1) + 32 + i / @column_max * IG::ITEM_FRAME_HEIGHT;
rect = Rect.new(x, y, IG::ITEM_FRAME_WIDTH, IG::ITEM_FRAME_HEIGHT);
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0));
bitmap = RPG::Cache.icon(item.icon_name);
self.contents.blt(x, y, bitmap, Rect.new(0, 0, IG::ITEM_FRAME_WIDTH, IG::ITEM_FRAME_HEIGHT), 255);
self.contents.draw_text(x, y, IG::ITEM_FRAME_WIDTH, IG::ITEM_FRAME_HEIGHT, (($iData.items[i] & 0x00FF00) >> 8).to_s, 2);
end
def update_cursor_rect
x = IG::BORDER*(@index % @column_max+1) + @index % @column_max * IG::ITEM_FRAME_WIDTH;
y = IG::BORDER*(@index / @column_max+1) + 32 + @index / @column_max * IG::ITEM_FRAME_HEIGHT;
self.cursor_rect.set(x, y, IG::ITEM_FRAME_WIDTH, IG::ITEM_FRAME_HEIGHT);
end
end
$iData = IData.new(); |
zum Lesen den Text mit der Maus markieren
(Ich weiß nicht wieso die map schwarz wird, villeicht hat da jemand anderes ne idee.)
Über Main einfügen.
Das bild für das Fenster muss in den Ordner Graphics/Pictures/
Dann gibst du den namen der datei am anfang des Scripts ein.
Aufrufen über:
|
|
Quellcode |
1 |
$scene = Inventar.new(x,y); |
Wobei x und y die position angibt wo es auftacuhen soll.
Funktionen:
Item Hinzufügen:
|
|
Quellcode |
1 |
$iData.addItem(ID,ANZAHL); |
Waffe Hinzufügen:
|
|
Quellcode |
1 |
$iData.addWeapon(ID,ANZAHL); |
Rüstung Hinzufügen:
|
|
Quellcode |
1 |
$iData.addArmor(ID,ANZAHL); |
Item Entfernen:
|
|
Quellcode |
1 |
$iData.removeItem(ID,ANZAHL); |
Waffe Entfernen:
|
|
Quellcode |
1 |
$iData.removeWeapon(ID,ANZAHL); |
Rüstung Entfernen:
|
|
Quellcode |
1 |
$iData.removeArmor(ID,ANZAHL); |
Item Restlos Entfernen:
|
|
Quellcode |
1 |
$iData.removeAllItem(ID,ANZAHL); |
Waffe Restlos Entfernen:
|
|
Quellcode |
1 |
$iData.removeAllWeapon(ID,ANZAHL); |
Rüstung Restlos Entfernen:
|
|
Quellcode |
1 |
$iData.removeAllArmor(ID,ANZAHL); |
Hat Item?
|
|
Quellcode |
1 |
$iData.hasItem?(ID); |
Hat Waffe?
|
|
Quellcode |
1 |
$iData.hasWeapon?(ID); |
Hat Rüstung?
|
|
Quellcode |
1 |
$iData.hasArmor?(ID); |
Den rest der funktionen hab ich wieder vergessen, sind jedoch alle in der klasse: IData
Sag bescheid wenn iwas noch ned klappen sollte, ich schau mal wegen der map
;( :jagen:
@Genocide: Du bist nicht der Fan davon, die Konzepte und Stile der bisherigen Scripte zu übernehmen, huh? .-.
Also erstmal, solltest du die Map, wenn du sie im Hintergrund willst, wirklich nur als Hintergrund nutzen, und in deren Viewport nicht noch Grafiken reinschieben, besonders viewport3 ist da eher ungeeignet.
Dein Problem ist, das du nicht das Prinzip verstehst, wie mir scheint.
Im RMXP wird aufgeteilt, zwischen, Game_ Klassen, die Daten halten, Grafik Klassen, die sich um die Anzeige kümmern und Scene_ Klassen, welche das Zusammenspiel von Daten und Darstellung verwalten, so wie die Usereingabe.
Indem Fall will Nudi ja nicht das du das System änderst, sondern nur die Anzeige der Daten, also musst du eigentlich nur in Window_Item was ändern, wo die Menüanzeige geregelt wird - sonst nirgens.
Und vielleicht noch in Scene_Item, wenn du noch das Spriteset_Map in die Scene einbinden willst.
Du machst das alles so kompliziert ^^
@Nudi:
In Scene_Menu, in der Methode update_command() solltest du die Zeile
finden. Diese ersetzt du mit
Allerdings ist das Script von Genocide bisher nicht zu empfehlen. Warte lieber auf seine Überarbeitung.
Also erstmal, solltest du die Map, wenn du sie im Hintergrund willst, wirklich nur als Hintergrund nutzen, und in deren Viewport nicht noch Grafiken reinschieben, besonders viewport3 ist da eher ungeeignet.
Dein Problem ist, das du nicht das Prinzip verstehst, wie mir scheint.
Im RMXP wird aufgeteilt, zwischen, Game_ Klassen, die Daten halten, Grafik Klassen, die sich um die Anzeige kümmern und Scene_ Klassen, welche das Zusammenspiel von Daten und Darstellung verwalten, so wie die Usereingabe.
Indem Fall will Nudi ja nicht das du das System änderst, sondern nur die Anzeige der Daten, also musst du eigentlich nur in Window_Item was ändern, wo die Menüanzeige geregelt wird - sonst nirgens.
Und vielleicht noch in Scene_Item, wenn du noch das Spriteset_Map in die Scene einbinden willst.
Du machst das alles so kompliziert ^^
@Nudi:
In Scene_Menu, in der Methode update_command() solltest du die Zeile
|
|
Ruby Quellcode |
1 |
$scene = Scene_Item.new |
|
|
Ruby Quellcode |
1 |
$scene = Inventar.new(x,y) |
Allerdings ist das Script von Genocide bisher nicht zu empfehlen. Warte lieber auf seine Überarbeitung.
Das große Scientia Wiki zur Spielentwicklung 
Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs
Musik von Shabraxxx für euch
Guide zu den Audioformaten
Skripte von mir (Auswahl):
Atmungssystem
| Streichholzsystem
| Animiert durch Bücher blättern
Random : Marktsystem für Kardor
| Staterelated Battlergraphic
| Hinweis auf mögliche Aktionen
SelfSwitchExpirationtimer Skript - Gameplayerweiterung für Pilzesammler und Farmspiele
Meine Skripte werden gerade hier gesammelt.

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch
Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem
| Streichholzsystem
| Animiert durch Bücher blättern
Random : Marktsystem für Kardor
| Staterelated Battlergraphic
| Hinweis auf mögliche Aktionen
SelfSwitchExpirationtimer Skript - Gameplayerweiterung für Pilzesammler und Farmspiele
Meine Skripte werden gerade hier gesammelt.

