item-limitation und inventarerweiterung
item-limitation und inventarerweiterung
ich kenne mich noch nicht so richtig gut aus in ags weshalb ich hier nach hilfe suche. ich wollte dass mein hauptcharakter nur eine bestimmte anzahl an items tragen kann. wenn er z.b. drei items bei sich trägt dann ist er voll beladen und kann keine weiteren items mehr aufnehmen. man soll aber auch items finden können die dann das inventar vergrößern auf z.b. 6 freie itemplätze. aber da ich mich noch nicht so gut auskenne und ags erst seit kurzem benutze wollte ich fragen ob ihr mir helfen könnt und mir sagen könnt wie das gehen könnte. vielleicht auch mit einem besispiel das wäre nett. danke.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Wenn der Spieler einen Gegenstand genommen hat, würdest Du normalerweise das hier schreiben:
Du schreibst stattdessen folgendes an den Anfang des Global scripts:
In den Script header:
Wenn der Spieler jetzt einen Gegenstand aufnimmt, schreibst Du einfach:
Wenn er etwas nimmt, das dass Inventar vergrößert, schreibst Du z.B.:
Wichtig: diese Funktion zählt alle Items, die der Spieler hat, sie würde also auch den Rucksack mitzählen. Wenn Du das verhindern willst, muss die CountInv()-Funktion z.B. so aussehen:
Code: Alles auswählen
player.AddInventory(iItem);
Code: Alles auswählen
int max_items;
export max_items;
function CountInv() {
int cnt=0;
int c=1;
while (c<=100) { // die 100 entsprechend erhöhen, wenn mehr Gegenstände da sind
cnt=cnt+player.InventoryQuantity[c];
}
return cnt;
}
function myAddInv(InventoryItem *item) {
if (CountInv()=max_items) {
player.Say("Ich trage schon zuviele Sachen mit mir herum.");
}
else {
player.AddInventory(item);
}
}
Code: Alles auswählen
import myAddInv(InventoryItem *item);
import max_items;
Code: Alles auswählen
myAddInv(iItem);
Code: Alles auswählen
player.AddInventory(iRucksack);
max_items=max_items+3;
Code: Alles auswählen
function CountInv() {
int cnt=0;
int c=1;
while (c<=100) { // die 100 entsprechend erhöhen, wenn mehr Gegenstände da sind
if (c<>iRucksack.ID && c<>iGuerteltasche.ID) {
cnt=cnt+player.InventoryQuantity[c];
}
}
return cnt;
}
Use gopher repellent on funny little man
bei mir kommt folgender fehler:
int max_items;
export max_items;
function CountInv() {
int cnt=0;
int c=1;
while (c<=100) { // die 100 entsprechend erhöhen, wenn mehr Gegenstände da sind
cnt=cnt+player.InventoryQuantity[c];
} /////////////LINE 23///////////
return cnt;
}
function myAddInv(InventoryItem *item) {
if (CountInv()==max_items) { /////////////LINE 28///////////
player.Say("Ich trage schon zuviele Sachen mit mir herum.");
}
else {
player.AddInventory(item);
}
}
myAddInv(iPoster); /////////////Room 1 LINE 21///////////
ich würde ja gerne selber den fehler finden bzw nach ihm suchen aber ich verstehe nur sehr wenig von dem code. ich hoffe du kannst mir noch einmal helfen. danke.[/quote]
int max_items;
export max_items;
function CountInv() {
int cnt=0;
int c=1;
while (c<=100) { // die 100 entsprechend erhöhen, wenn mehr Gegenstände da sind
cnt=cnt+player.InventoryQuantity[c];
} /////////////LINE 23///////////
return cnt;
}
function myAddInv(InventoryItem *item) {
if (CountInv()==max_items) { /////////////LINE 28///////////
player.Say("Ich trage schon zuviele Sachen mit mir herum.");
}
else {
player.AddInventory(item);
}
}
myAddInv(iPoster); /////////////Room 1 LINE 21///////////
ich würde ja gerne selber den fehler finden bzw nach ihm suchen aber ich verstehe nur sehr wenig von dem code. ich hoffe du kannst mir noch einmal helfen. danke.[/quote]
-
- Hobby-Archäologe
- Beiträge: 163
- Registriert: 28.04.2005, 16:26
- Wohnort: Mönchengladbach
Das Skript hängt, weil die While-Schleife "ewig" durchlaufen wird.der neue hat geschrieben: ich würde ja gerne selber den fehler finden bzw nach ihm suchen aber ich verstehe nur sehr wenig von dem code. ich hoffe du kannst mir noch einmal helfen. danke.
khrismuc hat, wenn ich das richtig sehe, nur ein "c++" vergessen:
Code: Alles auswählen
function CountInv() {
int cnt=0;
int c=1;
while (c<=AGS_MAX_INV_ITEMS) {
cnt=cnt+player.InventoryQuantity[c];
c++;
}
return cnt;
}
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Genau, das passiert mir öfter
Danke, Smiley
@der neue:
die beiden Funktion sind eigentlich recht einfach, CountInv() zählt alle Inventargegenstände, und myAddInv() prüft, ob das Inventar voll ist.
player.InventoryQuantity[c] liefert die Anzahl Gegenstände der Nummer c, die der Spieler im Inventar hat. Normalerweise 0 oder 1. Mit der Variable c zähle ich alle Gegenstände von 1 bis 100 durch, mit cnt zähle ich deren Anzahl, indem ich ständig hinzuaddiere, wieviel von einem Gegenstand im Inventar ist. Mit iItem.ID erhalte ich die Nummer des Gegenstandes, die if-Abfrage stellt sicher, dass ein paar Objekte nicht mitgezählt werden.
Danke, Smiley
@der neue:
die beiden Funktion sind eigentlich recht einfach, CountInv() zählt alle Inventargegenstände, und myAddInv() prüft, ob das Inventar voll ist.
player.InventoryQuantity[c] liefert die Anzahl Gegenstände der Nummer c, die der Spieler im Inventar hat. Normalerweise 0 oder 1. Mit der Variable c zähle ich alle Gegenstände von 1 bis 100 durch, mit cnt zähle ich deren Anzahl, indem ich ständig hinzuaddiere, wieviel von einem Gegenstand im Inventar ist. Mit iItem.ID erhalte ich die Nummer des Gegenstandes, die if-Abfrage stellt sicher, dass ein paar Objekte nicht mitgezählt werden.
Use gopher repellent on funny little man