Quest Shop Program in C

How to write a Quest Shop Program in C?


Solution:
/*Quest Shop C Program*/
- shop quest_shop -1,501:50
que_sign01,40,194,4, script Quest#questshop 494,{
set @i,0;
mes "[Quest Shop]";
mes "Olá ^FF0000 "+strcharinfo(0)+", aqui você poderá escolher várias quests para fazer.";
mes "^FF0000*Lembre-se de escolher apenas um item por vez.*^000000";
close2;
callshop "quest_shop",1;
npcshopattach "quest_shop";
end;

OnBuyItem:
if(.BuildQuest) {
for(set .e,0; !compare(getarg(.e+1)+ "","Zeny"); set .e,.e+2) {}
npcshopadditem "quest_shop",getarg(.e+2),getarg(.e)*compare(getarg(.e+1),"SZeny");
setarray .Shop[.i],getarg(.e+2);
set .i,.i+1;
goto Quest_Setup;
}
if(.Shop[@i]!=@bought_nameid) for(set @i,1; 1; set @i,@i+1) if(.Shop[@i]==@bought_nameid) { set .i,@i; callsub Quest_Setup; }
for(set @i,1; !@e; set @i,@i+1) if(.Shop[@i]==@bought_nameid) { set @e,1; set .i,@i; callsub Quest_Setup; }
mes "[Quest Shop]";
mes "Requerimento:";
for(set @i,0; !compare(getarg(@i+1)+ "","Zeny"); set @i,@i+2) mes "^FF0000" + ((countitem(getarg(@i))>=getarg(@i+1))? "^00FF00":"") + "" + getarg(@i+1) + " " + getitemname(getarg(@i)) + " [" + countitem(getarg(@i)) + "/" + getarg(@i+1) + "]";
if(getarg(@i)) mes "^FF0000" + ((Zeny>=getarg(@i))? "^00FF00":"") + "" + getarg(@i) + " Zeny";
mes "^000000Recompensa:^0000FF";
for(set @i,@i+2; getarg(@i+1,0); set @i,@i+2) mes getarg(@i+1) + " " + getitemname(getarg(@i));
switch(select("Trocar:" + (((((getiteminfo(@bought_nameid,5) & 1) || (getiteminfo(@bought_nameid,5) & 256) || (getiteminfo(@bought_nameid,5) & 512)) && @equip==0))? "Item de Visualização":"") + ":Não, obrigado")) {
case 1:
for(set @i,0; !compare(getarg(@i+1)+ "","Zeny"); set @i,@i+2) if(countitem(getarg(@i)) < getarg(@i+1)) {
next;
mes "[Quest Shop]";
mes "Você tem " + countitem(getarg(@i)) + " " + getitemname(getarg(@i)) + ", enquanto eu requeiro " + getarg(@i+1) + ".";
mes "Por favor obtenha ^FF0000" + (getarg(@i+1)-countitem(getarg(@i))) + " " + getitemname(getarg(@i)) + "^000000.";
close;
}
if(Zeny < getarg(@i)) {
next;
mes "[Quest Shop]";
mes "Você não tem o Zeny suficiente.";
mes "Por favor obtenha ^FF0000" + (getarg(@i)-Zeny) + " Zeny^000000.";
close;
}
for(set @i,0; !compare(getarg(@i+1)+ "","Zeny"); set @i,@i+2) delitem getarg(@i),getarg(@i+1);
set Zeny,Zeny-getarg(@i);
for(set @i,@i+2; getarg(@i+1,0); set @i,@i+2) getitem getarg(@i),getarg(@i+1);
if (compare(getarg(@i,0),"announce")) announce "[" + strcharinfo(0) + "] acaba de fazer a quest: " + getitemname(@bought_nameid) + "!",bc_all;
close;
case 2:
set @bottomview, getlook(3);
set @topview, getlook(4);
set @midview, getlook(5);
addtimer 1000, strnpcinfo(3)+"::On_Leave";
set @equip,getiteminfo(@bought_nameid, 5);
set @view, getiteminfo(@bought_nameid, 11);
if(@equip != -1 && @view > 0) {
if(@equip & 1) atcommand "@changelook 3 " + @view;
if(@equip & 256) atcommand "@changelook 1 " + @view;
if(@equip & 512) atcommand "@changelook 2 " + @view;
}
next;
goto OnBuyItem;
case 3:
close;
}
On_Leave:
atcommand "@changelook 1 " + @topview;
atcommand "@changelook 2 " + @midview;
atcommand "@changelook 3 " + @bottomview;
set @equip,0;
set @view,0;
set @topview,0;
set @midview,0;
set @bottomview,0;
end;
OnInit:
npcshopdelitem "quest_shop",501;
set .BuildQuest,1;
set .i,1;
Quest_Setup:
switch(.i) {
default: set .BuildQuest,0; set .e,0; set .i,0; end;
case 1: callsub OnBuyItem,914,500,7445,300,7214,100,707,100,710,100,0,"SZeny",20021,1,"announce";
case 2: callsub OnBuyItem,2286,1,1049,50,999,20,7047,200,20000000,"SZeny",20022,1,"announce";
case 3: callsub OnBuyItem,994,20,7098,80,7440,100,7563,250,7507,100,7013,500,7301,500,1004,20,0,"SZeny",20023,1,"announce";
case 4: callsub OnBuyItem,945,300,1016,200,957,200,925,200,1020,200,7066,300,7439,30,0,"SZeny",20027,1,"announce";
case 5: callsub OnBuyItem,5005,1,2287,1,999,20,945,200,918,50,20000000,"SZeny",20028,1,"announce";
case 6: callsub OnBuyItem,1006,200,7118,100,7449,300,7263,100,7200,50,0,"SZeny",20029,1,"announce";
case 7: callsub OnBuyItem,7206,100,7263,100,942,20,1055,300,7019,10,0,"SZeny",20073,1,"announce";
case 8: callsub OnBuyItem,706,20,7447,200,971,200,7196,50,7097,200,0,"SZeny",20100,1,"announce";
case 9: callsub OnBuyItem,7014,200,961,300,7101,300,1024,200,7158,100,0,"SZeny",20099,1,"announce";
case 10: callsub OnBuyItem,975,20,7447,150,660,200,7216,200,0,"SZeny",20008,1,"announce";
case 11: callsub OnBuyItem,975,20,7440,200,974,200,7213,100,0,"SZeny",20010,1,"announce";
case 12: callsub OnBuyItem,1039,150,1040,100,7448,200,1060,200,0,"SZeny",20020,1,"announce";
case 13: callsub OnBuyItem,7048,50,998,150,1000,150,7319,200,0,"SZeny",20105,1,"announce";
case 14: callsub OnBuyItem,707,100,7015,200,7118,100,710,100,0,"SZeny",20025,1,"announce";
}
}


Learn More :