Jump to content

Quest script


Werdio

Recommended Posts


  • Group:  Members
  • Topic Count:  83
  • Topics Per Day:  0.02
  • Content Count:  248
  • Reputation:   1
  • Joined:  06/27/12
  • Last Seen:  

Hallo rAthena Team,

ich würde gerne wissen, wie ich einen Script so gestalte, dass er mir bestimmt items für bestimmt items gibt.

z.B.:

script Valkyrie Helm Mixer 123

If item (irgend eine Item ID o. mehrere IDs)

|

giveitem Valkyrie Helm |

|

@breakitem (mixitems von oben) <--------

Dies ist nur ein gedankliches Konstrukt, da ich nicht weiß wie ich diese befehle miteinander verknüpfen soll :/

Kann mir da jemand einen Beispiel geben, damit ich es zumindest etwas verstehe und dann so übernehmen und kopieren kann?

Danke im Vorraus :D

Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  44
  • Topics Per Day:  0.01
  • Content Count:  896
  • Reputation:   117
  • Joined:  05/23/12
  • Last Seen:  

Hier ist einer der einfachsten Arten. Hoffe du wirst es verstehen.

prtonter,x,y,z script  Quest id,{
//Ist quest == 1 ?
if (quest == 1){
//Wenn ja, habe ich alle beiden Items und auch die richtige Anzahl oder mehr ?
if (countitem(512) >= 500 && countitem(ID) >= 250){
mes "Wunderbar, du hast alle Items gefunden.";
//Lösche beide Items
delitem 512,500;
delitem ID,250;
//Gebe das Item
getitem ID,1;
//Setzt die Variable Quest wieder auf null, damit ich den Quest nochmal machen kann.
set quest,0;
close;
}
mes "Du hast nicht alle Items.";
close;
}
mes "Ich brauche folgende Items:";
mes"";
mes "[^ff0000500^000000]x Apple";
mes "[^ff0000250^000000]x Irwas";
mes "Komm wieder, wenn du alle Items hast.";
//Setzt die Variable quest auf 1, damit dieser Text nicht wiederolt wird.
set quest,1;
}

Rynbef~

Edited by Rynbef
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  16
  • Topics Per Day:  0.00
  • Content Count:  658
  • Reputation:   57
  • Joined:  11/20/11
  • Last Seen:  

Ähnlich wie Rynbeef :

prontera,xxx,yyy,z<tab>script<tab>Valkyrie<tab>SPR,{

set .@n$,"^0000FF[ Valkyrie ]^000000";

set .@ValkID,XXXXX; // Änder dies zu der ID Des Items,das der Spieler bekommt.

mes .@n$;

mes "Hallo,du brauchst :";

mes "100x Apple...";

mes "400x Yellow Bijou....";

mes "XXXx ItemXXXX....";

mes "Für den Valkyrie Helm.";

next;

mes .@n$;

mes "Hast du diese Items?";

next;

switch(select("Ja:Nein")) {

case 1:

mes "Dann lass mich mal schauen.";

if(countitem(APPLEITEMID) <100) goto l_noitem;

if(countitem(YELLOWITEMID) <400) goto l_noitem;

if(countitem(XXXXXXID) <Anzahl) goto l_noitem;

delitem APPLEITEMID,100;

delitem YELLOWITEMID,400;

delitem XXXXXXID,ANZAHL;

next;

mes .@n$;

mes "Vielen Dank,viel spaß mit dem Item.";

getitem ValkID,1;

close;

case 2:

mes "Dann besorge die Items!";

close;

}

l_noitem:

mes "Du hast nicht alle items die ich brauche bei dir im Inventar.";

close;

}

Hat 2 Minuten gedauert,ist aber nur ein vereinfachter script.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  83
  • Topics Per Day:  0.02
  • Content Count:  248
  • Reputation:   1
  • Joined:  06/27/12
  • Last Seen:  

dragonia,37,43,0 script Cowgirl 123,{
if (quest == 1){
if (countitem(969) >= 10 && countitem(4001) >= 1){
mes "[Cowgirl]";
mes "Wunderbar, du hast alle Items gefunden.";
delitem 969,10;
delitem 4001,1;
getitem 20140,1;
set quest,0;
close;
}
}
mes "[Cowgirl]";
mes "Hallo Reisender, ich stelle Cowboy Hats her.";
next;
mes "[Cowgirl]";
mes "Ich brauche folgende Items:";
mes"";
mes "^ff000010^000000x Gold";
mes "^ff00001^000000x Poring Card";
mes "Komm wieder, wenn du alle Items hast.";
set quest,1;
close;
}
}

Funktioniert perfekt :) Nun würde ich gerne eine case Funktion einbauen, damit sich der Spieler eine Farbe aussuchen kann - wer kann helfen? :) + kann man es so scripten, dass wen man die items nicht hat nur die Nachricht: "Komm wieder, wenn du alle Items hast" erscheint?

Edited by Duck
Link to comment
Share on other sites


  • Group:  Forum Moderator
  • Topic Count:  44
  • Topics Per Day:  0.01
  • Content Count:  896
  • Reputation:   117
  • Joined:  05/23/12
  • Last Seen:  

Dafür gibt es unmengen an möglichkeiten. Ich vermute mal, das du für jede Farbe die gleichen Items nehmen möchtest. Deshalb wäre dies einer der möglichkeiten, habe es nicht getestet, hoffe es geht auch /hmm

dragonia,37,43,0 script Cowgirl 123,{
if (quest == 1){
if (countitem(969) >= 10 && countitem(4001) >= 1){
 mes "[Cowgirl]";
 mes "Wunderbar, du hast alle Items gefunden.";
 next;
 mes "Bitte wähle ein Farbe aus.";
 switch(select("Rot","Blau","Weiss","Schwarz","Gelb","Grün")){
  case 1:
   set @farbe,1;
   goto Item;
   break;
  case 2:
   set @farbe,1;
   goto Item;
   break;
  case 3:
   set @farbe,1;
   goto Item;
   break;
  case 4:
   set @farbe,1;
   goto Item;
   break;
  case 5:
   set @farbe,1;
   goto Item;
   break;
  case 6:
   set @farbe,1;
   goto Item;
   break;
 }
}
mes "Du hast nicht alle Items.";
mes "Komm wieder, wenn du alle Items hast.";
close;
}
mes "[Cowgirl]";
mes "Hallo Reisender, ich stelle Cowboy Hats her.";
next;
mes "[Cowgirl]";
mes "Ich brauche folgende Items:";
mes"";
mes "^ff000010^000000x Gold";
mes "^ff00001^000000x Poring Card";
mes "Komm wieder, wenn du alle Items hast.";
set quest,1;
close;

Item:
delitem 969,10;
delitem 4001,1;
if (@farbe == 1)getitem 20140,1;
if (@farbe == 2)getitem 20140,1;
if (@farbe == 3)getitem 20140,1;
if (@farbe == 4)getitem 20140,1;
if (@farbe == 5)getitem 20140,1;
if (@farbe == 6)getitem 20140,1;
set quest,0;
close;
}

Rynbef~

Edited by Rynbef
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  16
  • Topics Per Day:  0.00
  • Content Count:  658
  • Reputation:   57
  • Joined:  11/20/11
  • Last Seen:  

Was du ihm noch sagen könntest,ist,dass er halt bei der gewählten farbe noch die Zahlen ändern muss.

dragonia,37,43,0 script Cowgirl 123,{
if (quest == 1){
if (countitem(969) >= 10 && countitem(4001) >= 1){
 mes "[Cowgirl]";
 mes "Wunderbar, du hast alle Items gefunden.";
 next;
 mes "Bitte wähle ein Farbe aus.";
 switch(select("Rot","Blau","Weiss","Schwarz","Gelb","Grün")){
  case 1:
set @farbe,1;                    // Hier 1
goto Item;
break;
  case 2:
set @farbe,2;                    // Hier 2
goto Item;
break;
  case 3:
set @farbe,3;                     // Hier 3
goto Item;
break;
  case 4:
set @farbe,4;                     // Hier 4
goto Item;
break;
  case 5:
set @farbe,5;                     // Hier 5
goto Item;
break;
  case 6:
set @farbe,6;                     // Hier 6
goto Item;
break;
 }
}
mes "Du hast nicht alle Items.";
mes "Komm wieder, wenn du alle Items hast.";
close;
}
mes "[Cowgirl]";
mes "Hallo Reisender, ich stelle Cowboy Hats her.";
next;
mes "[Cowgirl]";
mes "Ich brauche folgende Items:";
mes"";
mes "^ff000010^000000x Gold";
mes "^ff00001^000000x Poring Card";
mes "Komm wieder, wenn du alle Items hast.";
set quest,1;
close;
Item:
delitem 969,10;
delitem 4001,1;
if (@farbe == 1)getitem 20140,1;
if (@farbe == 2)getitem 20140,1;
if (@farbe == 3)getitem 20140,1;
if (@farbe == 4)getitem 20140,1;
if (@farbe == 5)getitem 20140,1;
if (@farbe == 6)getitem 20140,1;
set quest,0;
close;
}

Sonst geht der Script ja immer zur gleichen Farbe :)

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  83
  • Topics Per Day:  0.02
  • Content Count:  248
  • Reputation:   1
  • Joined:  06/27/12
  • Last Seen:  

Könnte man es vielleicht so umschreiben, dass das Script zuerst die case funktion zeigt.. also z.B. so:

Ich kann dir blabla mixen:

Welches Custom möchtest du?

Black

White

Rot // ich wähle mal rot

Dafür benötige ich

1x bla

10x blah

und wenn man den npc wieder anspricht, dass er von vorne frägt: Ich kann dir items mixen, welche farbe und so , geht das? :D

Ist jetzt bisschen schlampig aber ist nur ein Beispiel :x

Link to comment
Share on other sites


  • Group:  Developer
  • Topic Count:  28
  • Topics Per Day:  0.01
  • Content Count:  547
  • Reputation:   270
  • Joined:  11/08/11
  • Last Seen:  

Hier hast du ein 0815 Skript von mir. Ist ungetestet und ich hab seit Jahren nichts mehr geskriptet, also bitte bei Fehlern einfach Bescheid sagen. ;)

dragonia,37,43,0    script    Cowgirl    123,{
   // Beim ersten Anreden
   if( cowboy_quest == 0 ){
       mes .name$;
       mes "Hallo Reisender, ich stelle Cowboy Hats her.";
       next;
       mes .name$;
       mes "Welche Farbe hättest du gerne?";
       set cowboy_quest, select( .menu$ );
       next;
   }

   switch( cowboy_quest ){
       case 1:
           setarray .@needed_ids[0],     id1,     id2;
           setarray .@needed_amounts[0],     anz1,    anz2;
           break;
       case 2:
           setarray .@needed_ids[0],     id1,     id2;
           setarray .@needed_amounts[0],     anz1,    anz2;
           break;
       case 3:
           setarray .@needed_ids[0],     id1,     id2;
           setarray .@needed_amounts[0],     anz1,    anz2;
           break;
       case 4:
           setarray .@needed_ids[0],     id1,     id2;
           setarray .@needed_amounts[0],     anz1,    anz2;
           break;
       case 5:
           setarray .@needed_ids[0],     id1,     id2;
           setarray .@needed_amounts[0],     anz1,    anz2;
           break;
       case 6:
           setarray .@needed_ids[0],     id1,     id2;
           setarray .@needed_amounts[0],     anz1,    anz2;
           break;
   }

   mes .name$;
   mes "Ich brauche folgende Items:";
   mes"";
   for( set .@i, 0; .@i < getarraysize( .@needed_ids ) ; set .@i, .@i + 1 ){
       mes "^ff0000" + .@needed_amounts[.@i] + "^000000x " + getitemname( .@needed_ids[.@i] );
   }
   next;

   mes .name$;
   mes "Mal sehen ob du alle Items hast die ich benötige.";
   next;    
   mes .name$;

   for( set .@i, 0; .@i < getarraysize( .@needed_ids ) ; set .@i, .@i + 1 ){
       if( countitem( .@needed_ids[.@i] ) < .@needed_amounts[.@i] ){
           mes "Du hast nicht genug " + getitemname( .@needed_ids[.@i] ) + "s.";
           mes "Komm wieder wenn du alle Items hast.";
           close;
       }
   }

   mes "Wunderbar, möchtest du deinen " + getitemname( .cowboy_hats[cowboy_quest] ) + " jetzt mixen?";
   next;
   mes .name$;

   if( select( "Ja:Nein" ) == 1 ){
       mes "Wunderbar, dann lege ich gleich los...";
       next;
       mes .name$;
       mes "Hier hast du dein Item, bis bald.";
       for( set .@i, 0; .@i < getarraysize( .@needed_ids ) ; set .@i, .@i + 1 ){
           delitem .@needed_ids[.@i], .@needed_amounts[.@i];
       }

       getitem .cowboy_hats[cowboy_quest], 1;
       // Wenn man nun wieder mixxen können soll, die nächste Zeile freischalten
       // set cowboy_quest, 0;
       close;
   }else{
       mes "Komm wieder wenn du es dir anders überlegt hast.";
       close;
   }


// Initialisierung des NPCs beim Mapserverstart/NPC Reload
OnInit:
   // Name der für den NPC angezeigt wird
   set .name$, "[Cowgirl]";
   // Namen verschiedenen Items
   setarray .@cowboy_hats$[0], "Rot", "Blau", "Weiß", "Schwarz", "Gelb", "Grün";
   // Item IDs der verschiedenen Items
   setarray .cowboy_hats[0], idrot, idblau, idweiss, idschwarz, idgelb, idgruen;

   // Aufbau des Menüs
   set .menu$, .@cowboy_hats$[0];
   for( set .@i, 0; .@i < getarraysize( .@cowboy_hats$ ) ; set .@i, .@i + 1 ){
       set .menu$, .menu$ + ":" + .@cowboy_hats$[.@i];
   }

   end;
}

Edited by Lemongrass
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  83
  • Topics Per Day:  0.02
  • Content Count:  248
  • Reputation:   1
  • Joined:  06/27/12
  • Last Seen:  

Danke, aber ich verstehe nicht was ich in id2 eintragen soll oder in anz2 o.O

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  20
  • Topics Per Day:  0.00
  • Content Count:  398
  • Reputation:   140
  • Joined:  01/04/12
  • Last Seen:  

Danke, aber ich verstehe nicht was ich in id2 eintragen soll oder in anz2 o.O

Halt ein zweites item was benötigt ist. Bei item id1 und id2 trägst du die normal item ids ein und bei der Anzahl halt so viel wie von dem jeweiligen Item gebraucht wird.

Link to comment
Share on other sites


  • Group:  Developer
  • Topic Count:  28
  • Topics Per Day:  0.01
  • Content Count:  547
  • Reputation:   270
  • Joined:  11/08/11
  • Last Seen:  

Halt ein zweites item was benötigt ist. Bei item id1 und id2 trägst du die normal item ids ein und bei der Anzahl halt so viel wie von dem jeweiligen Item gebraucht wird.

Richtig. Lässt sich auch bis zu 127 oder so mit Beistrichen fortführen. Wichtig ist, dass immer die Anzahl der IDs und die Anzahl der benötigten Menge gleich groß sein sollte. Sprich wenn du ein weiteres benötigtes Item einträgst, solltest du auch die benötigte Menge dafür eintragen.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  83
  • Topics Per Day:  0.02
  • Content Count:  248
  • Reputation:   1
  • Joined:  06/27/12
  • Last Seen:  

Also dein 0815 script funktioniert irgendwie nicht. Es läd zwar aber da wo man ein Hat auswählen sollte steht nichts, es ist leer. Im script sehe ich nicht die IDs von den Items, könntest du mir bitte ein beispiel mit der vorgegebenen ID geben, damit ich es in zukunft einfach kopieren und ersetzen kann und nicht viel rumschreiben muss und somit das Script zerstöre? (bin nochn newbie :D)

Danke im vorraus

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...