#include "AShop.h"
bool AShop::arbeiten(KartenspielClient *client, string befehl,vector<string>& daten){
//////// Shop
//// GetGeld()
if(befehl == "GetGeld"){
client->infoGeld();
return true;
}
//// GetShopArtikel()
if(befehl == "GetShopArtikel"){
Query query(con);
query<<"select name from artikel";
string daten;
if(StoreQueryResult res = query.store()){
for(unsigned int i=0; i<res.num_rows(); ++i){
if(i)
daten+=datentrenner;
daten+=(string)res[i]["name"];
}
client->infoShopArtikel(daten);
}
else{
cout << "GetShopArtikelFailed to get item list: " << query.error() << endl;
}
return true;
}
//// GetKaufBeschreibung(artikel)
if(befehl == "GetKaufBeschreibung" && daten.size() == 1){
Query query(con);
query<<"select beschreibung,anzahl,preis from artikel where name="<<quote<<daten[0];
if(StoreQueryResult res = query.store()){
if(res.num_rows()){
client->infoKaufbeschreibung((string)res[0]["beschreibung"]+
"<br>Anzahl: "+(string)res[0]["anzahl"]+
"<br>Preis: "+(string)res[0]["preis"]);
}
}
else{
cout << "GetKaufBeschreibung to get item list: " << query.error() << endl;
}
return true;
}
// CallKaufen(artikel)
if(befehl == "CallKaufen" && daten.size() == 1){
cout<<"bin in kaufen"<<endl;
Query query(con);
query<<"select * from artikel where name="<<quote<<daten[0];
if(StoreQueryResult res = query.store()){
cout<<"gefunden"<<endl;
if(res.num_rows()){
if((int)res[0]["preis"] > client->getGeld()){
client->nachrichtenBox("Du hast zu wenig Geld");
}
else{
if((int)res[0]["anzahl"] == 0){
client->nachrichtenBox("Der Artikel ist ausverkauft");
}
else
{
query<<"update artikel set anzahl=anzahl-1 where name ="<<quote<<daten[0];
query.execute();
client->setGeld(client->getGeld()-(int)res[0]["preis"]);
// Es wird gekauft
if((string)res[0]["anzahlzufallskarten"] == "0"){
query<<"select kartenid,karten.name from artikelkarten\n"
<<"inner join karten on artikelkarten.kartenid=karten.id\n"
<<"where artikelid="<<quote<<res[0]["id"];
string neuekarten;
if(StoreQueryResult res = query.store()){
for(unsigned int i=0; i<res.num_rows(); ++i){
cout<<"gib karte"<<endl;
if(i)
neuekarten+=datentrenner;
neuekarten+=(string)res[0]["name"];
query<<"INSERT INTO benutzerkarten(benutzerid,kartenid) VALUES((select id from benutzer where name\n"<<
"="<<quote<<client->getName()<<"),"<<res[i]["kartenid"]<<")";
query.execute();
}
}
else{
cout << "CallKaufen2 to get item list: " << query.error() << endl;
}
client->gibNeueKarten(neuekarten);
}
else{
int sehr_haeufig=(int)res[0]["anzahlzufallskarten"]*0.4;
int normal=(int)res[0]["anzahlzufallskarten"]*0.4;
int rar=(int)res[0]["anzahlzufallskarten"]*0.15;
int selten=(int)res[0]["anzahlzufallskarten"]*0.05;
string neuekarten;
cout<<"zufallskauf!"<<endl;
string hk;
int anz=0;
for(int k=0;k<4;++k){
if(k==0){
hk="normal";
anz=normal;
}
if(k==1){
hk="rar";
anz=rar;
}
if(k==2){
hk="selten";
anz=selten;
}
if(k==3){
hk="sehr haeufig";
anz=sehr_haeufig;
}
query<<"select karten.id,karten.name from ((artikelkarten inner join karten on\n"
<<"artikelkarten.kartenid=karten.id) inner join artikel\n"
<<"on artikelkarten.zufallsid=artikel.zufallsid)\n"
<<"inner join haeufigkeiten on haeufigkeiten.id = karten.haeufigkeit\n"
<<"where haeufigkeiten.bezeichnung like "<<quote<<hk<<" and\n"
<<"artikelkarten.artikelid="<<quote<<res[0]["id"];
if(StoreQueryResult res2 = query.store()){
if(res2.num_rows()){
for(int i=0;i<anz;++i){
if(neuekarten != "")
neuekarten+=datentrenner;
cout<<"zufallskarte"<<endl;
int z=rand()%res2.num_rows();
neuekarten+=(string)res2[z]["name"];
query<<"INSERT INTO benutzerkarten(benutzerid,kartenid) VALUES((select id from benutzer where name\n"<<
"="<<quote<<client->getName()<<"),"<<res2[z]["id"]<<")";
query.execute();
}
}
}
else{
cout << "CallKaufen3 to get item list: " << query.error() << endl;
}
}
client->gibNeueKarten(neuekarten);
}
}
}
}
}
else{
cout << "CallKaufen1 to get item list: " << query.error() << endl;
}
return true;
}
return false;
}