Example #1
0
/*ARGSUSED1*/
void
special(int key, int x, int y) {
    switch(key) {
    case GLUT_KEY_UP:	levelup(); break;
    case GLUT_KEY_DOWN:	leveldown(); break;
    }
    glutPostRedisplay();
}
Example #2
0
int		act_levelup(char *param, t_client *client, t_info *info)
{
  (void)param;
  if (has_players(info, client) < 0 ||
      has_ressources(info, client) < 0)
    {
      SEND(client->buf_write, KO);
      return (-1);
    }
  levelup(client, info);
  if (!is_levelmax(client, info))
    {
      /*           free_info(info); */
      /*            exit(0); */
    }
  return (0);
}
Example #3
0
void CharacterComponent::recalculateLevel(Entity &entity)
{
    std::list<float> levels;
    std::map<int, int>::const_iterator a;
    for (a = getSkillBegin(); a != getSkillEnd(); a++)
    {
        // Only use the first 1000 skill levels in calculation
        if (a->first < 1000)
        {
            float expGot = getExpGot(a->first);
            float expNeed = getExpNeeded(a->first);
            levels.push_back(levelForExp(a->first) + expGot / expNeed);
        }
    }
    levels.sort();

    std::list<float>::iterator i = levels.end();
    float level = 0.0f;
    float factor = 1.0f;
    float factorSum = 0.0f;
    while (i != levels.begin())
    {
        i--;
        level += *i * factor;
        factorSum += factor;
        factor *= LEVEL_SKILL_PRECEDENCE_FACTOR;
    }
    level /= factorSum;
    level += 1.0f; // + 1.0f because the lowest level is 1 and not 0

    while (mLevel < level)
    {
        levelup(entity);
    }

    int levelProgress = int((level - floor(level)) * 100);
    if (levelProgress != mLevelProgress)
    {
        mLevelProgress = levelProgress;
        mUpdateLevelProgress = true;
    }
}
Example #4
0
int config_read_mem(config_t* cfg, char *mem, size_t n)
{
	int c, line, next, status;
	enum {prekey, key, postkey, preval, val_raw, val_single, val_double, postval, comment} state = prekey;
	char *buf, *keybuf, *valbuf, *level;
	size_t i;

	line = 1;
	buf = keybuf = valbuf = level = NULL;

	for (i = 0; i <= n; ++i) {
	c = *mem++;
	if (i == n) c = EOF;
	switch (c) {
		case ';':
			switch (state) {
				case prekey:
				case val_raw:
				case postval:
					while (c != '\n' && c != '\r' && c != EOF && i < n)
						++i, c = *mem++;
					--i, --mem;
					break;
				default:
					config_set_strerror(cfg, "unexpected start of comment");
					goto error;
			}
			break;
		case '{':
			switch (state) {
				case key:
				case postkey:
					level = levelup(level, buf);
					free(buf);
					buf = NULL;
					state = prekey;
					break;
				default:
					config_set_strerror(cfg, "unexpected level declaration");
					goto error;
			}
			break;
		case '}':
			switch (state) {
				case prekey:
				case val_raw:
				case postval:
					if (level == NULL)
						return line;

					level = leveldown(level);
					break;
				default:
					config_set_strerror(cfg, "unexpected '}'");
					goto error;
			}
			break;
		case '=':
			switch (state) {
				case key:
				case postkey:
					keybuf = strdup(buf);
					free(buf);
					buf = NULL;
					state = preval;
					break;
				default:
					config_set_strerror(cfg, "unexpected '='");
					goto error;
			}
			break;
		case '"':
			switch (state) {
				case preval:
					state = val_double;
					break;
				case val_double:
					state = postval;
					break;
				case val_single:
					buf = addchar(buf, c);
					break;
				default:
					config_set_strerror(cfg, "unexpected '\"'");
					goto error;
			}
			break;
		case '\'':
			switch (state) {
				case preval:
					state = val_single;
					break;
				case val_single:
					state = postval;
					break;
				case val_double:
					buf = addchar(buf, c);
					break;
				default:
					config_set_strerror(cfg,"unexpected \"'\"");
					goto error;
			}
			break;
		case EOF:
			switch (state) {
				case prekey:
				case postval:
				case val_raw:
					break;
				default:
					line = -1;
					config_set_strerror(cfg,"parse error");
					goto error;
			}
		case '\r':
		case '\n':
			switch (state) {
				case prekey:
					break;
				case val_raw:
				case postval:
					valbuf = strdup(buf);
					free(buf);
					buf = NULL;

					if (keybuf && valbuf) {
						status = config_set_with_level(cfg,level, keybuf, valbuf);
						free(keybuf);
						free(valbuf);

						keybuf = valbuf = NULL;

						if (status) {
							config_set_strerror(cfg,"out of memory");
							line = -1;
							goto error;
						}
					} else {
						free (keybuf);
						free (valbuf);

						config_set_strerror(cfg,"out of memory");
						line = -1;
						goto error;
					}

					break;
				default:
					config_set_strerror(cfg,"unexpected end of file");
					goto error;
			}

			++line;
			state = prekey;

			break;
		case ' ':
		case '\t':
			switch (state) {
				case key:
					state = postkey;
					break;
				case val_raw:
					state = postval;
					break;
				case val_single:
				case val_double:
					buf = addchar(buf, c);
					break;
				default:
					continue;
			}
			break;
		case '\\':
			//next = fgetc(fp);
			next = *(mem+1);

			switch (state) {
				case val_single:
					if (next == '\'') {
						buf = addchar(buf, '\'');
						++mem, ++i;
					} else {
						buf = addchar(buf, '\\');
					}
					break;
				case val_double:
					++mem, ++i;
					if (next == 'n')       buf = addchar(buf, '\n');
					else if (next == 't')  buf = addchar(buf, '\t');
					else if (next == 'r')  buf = addchar(buf, '\r');
					else if (next == 'v')  buf = addchar(buf, '\v');
					else if (next == '\\') buf = addchar(buf, '\\');
					else --mem, --i;
					break;
				default:
					break;
			}
			break;
		default:
			switch (state) {
				case prekey:
					state = key;
				case key:
					buf = addchar(buf, c);
					break;
				case preval:
					state = val_raw;
				case val_raw:
				case val_single:
				case val_double:
					buf = addchar(buf, c);
					break;
				default:
					config_set_strerror(cfg,"parse error");
					goto error;
			}
		}
	}

	if (level != NULL) {
		config_set_strerror(cfg,"missing '}'");
		goto error;
	} 

	return 0;

error:
	free(buf);
	free(keybuf);
	free(valbuf);
	free(level);

	return line;
}
Example #5
0
				bool OnGossipSelect(Player * pPlayer, Creature * pCreature, uint32 /*uiSender*/, uint32 uiAction)
				{
					switch (uiAction)
					{
					case 1:
					{
						
						uint32 guid = pPlayer->GetGUID();

						QueryResult accountres = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = %u", guid);
						uint32 accountresint = (*accountres)[0].GetUInt32();
						QueryResult charresult = CharacterDatabase.PQuery("Select count(guid) From characters where account = '%u'", accountresint);
						uint32 charresultint = (*charresult)[0].GetUInt32();

						QueryResult onechar = CharacterDatabase.PQuery("Select count(guid) From first_char where guid = '%u'", guid);
						uint32 onecharint = (*onechar)[0].GetUInt32();

						QueryResult ipadr = LoginDatabase.PQuery("SELECT last_ip FROM account where id = %u", accountresint);
						std::string ipadrint = (*ipadr)[0].GetString();
						QueryResult ipadrcount = LoginDatabase.PQuery("SELECT count(last_ip) FROM account WHERE last_ip = '%s'", ipadrint);
						uint32 ipadrcountint = (*ipadrcount)[0].GetUInt32();


						/*Username*/
						QueryResult guidname = CharacterDatabase.PQuery("SELECT name FROM characters where guid = %u", guid);
						std::string charname = (*guidname)[0].GetString();

						/*Accname*/
						QueryResult accountname = LoginDatabase.PQuery("SELECT username FROM account where id = %u", accountresint);
						std::string accname = (*accountname)[0].GetString();

						/*Acccountanzahl zählen*/
						QueryResult accountanz = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = %u", guid);
						uint32 accountanzint = (*accountanz)[0].GetUInt32();
						QueryResult accountgesanz = CharacterDatabase.PQuery("SELECT count(account) FROM first_char WHERE account = '%u'", accountanzint);
						uint32 accountanzgesint = (*accountgesanz)[0].GetUInt32();



						if (charresultint == 1 && ipadrcountint == 1 && onecharint != 1 && accountanzgesint <= 1){

							time_t sek;
							time(&sek);
							uint32 zeit = time(&sek);
							pPlayer->GetGUID();
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Deine Aufwertung wurde ausgefuehrt. Viel Spass wuenscht Exitare sowie das MMOwning-Team.",
								pPlayer->GetName());

							ss << "|cff54b5ffEine Firstausstattung wurde von |r " << ChatHandler(pPlayer->GetSession()).GetNameLink() << " |cff54b5ff in Anspruch genommen!|r";
							sWorld->SendGMText(LANG_GM_BROADCAST, ss.str().c_str());
							pPlayer->PlayerTalkClass->SendCloseGossip();
							pPlayer->SetLevel(80);
							pPlayer->TeleportTo(0, -792.84, -1607.55, 142.30, 2.33, 0);
							pPlayer->AddItem(20400, 4);
							pPlayer->SetMoney(50000000);
							pPlayer->UpdateSkillsToMaxSkillsForLevel();
							pPlayer->UpdateSkillsForLevel();
							DBeintrag(pPlayer->GetSession()->GetPlayer(), "Firstaustattung einzel");
                            pPlayer->SaveRecallPosition();




							pPlayer->PlayerTalkClass->SendCloseGossip();

							CharacterDatabase.PExecute("REPLACE INTO first_char "
								"(guid,Charname, account, Accname, time, guildid,ip) "
								"VALUES ('%u', '%s', %u, '%s', %u, %u, '%s')",
								guid, charname, accountresint, accname, zeit, 0, ipadrint);

							return true;
						}

						else {
							pPlayer->GetGUID();
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nDu hast bereits einen anderen Charakter auf diesem Realm oder versuchst mit zu vielen Accounts eine Erstaustattung zu erlangen.\nDiese wird daher abgelehnt.\nMfG Exitare und das MMOwning-Team.",
								pPlayer->GetName());
							pPlayer->PlayerTalkClass->SendCloseGossip();
							return true;
						}



					}break;

					case 0:
					{
						

						pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
						pPlayer->PlayerTalkClass->ClearMenus();
						pPlayer->ADD_GOSSIP_ITEM(7, "Einzelausstattung. Wer/Was/Wie?", GOSSIP_SENDER_MAIN, 5);
						pPlayer->ADD_GOSSIP_ITEM(7, "Gildentransfer Wer/Was/Wie?", GOSSIP_SENDER_MAIN, 6);
						pPlayer->ADD_GOSSIP_ITEM(7, "Meine Aufwertung wurde abgelehnt! Was tun?", GOSSIP_SENDER_MAIN, 7);
						pPlayer->ADD_GOSSIP_ITEM(7, "Ich moechte einen anderen Charakter ausstatten lassen.", GOSSIP_SENDER_MAIN, 8);
						pPlayer->ADD_GOSSIP_ITEM(7, "Ein Spieler mit der selben IP moechte eine Charakteraufwertung! Wie geht das?", GOSSIP_SENDER_MAIN, 9);
						pPlayer->ADD_GOSSIP_ITEM(7, "Was bedeutet Level 80 Equipment?", GOSSIP_SENDER_MAIN, 11);
						pPlayer->ADD_GOSSIP_ITEM(7, "Was ist das Gutschein generieren?", GOSSIP_SENDER_MAIN, 8000);
						pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
						return true;
					}break;


					case 5:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nWer? \nJeder der noch keinen Character auf seinem Account hat. Es muss zwingend der erste Charakter ausgestattet werden. Existiert ein Charakter auf dem Account muss dieser geloescht werden.\nWas?\nEs gibt 5k Gold, 4 Taschen, sowie eine Grundausstattung auf Itemlevel 219.\nWie? \nEinfach auf ""Charakteraufwertung beantragen"" klicken und alles wird in die Wege geleitet.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}

					case 6:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nEine Gildenaufwertung funktioniert praktisch wie eine Einzelaufwertung.Zusaetzlich bekommt ihr jedoch den Reitskill bis zu Schnellem Reiten hochgesetzt. Ihr muesst jedoch in einer Gilde sein und duerft keine Einzelaufwertung beantragt haben. Solltet ihr das getan haben, einfach den Charakter loeschen und neu machen. Ihr muesst die Gilde schon gegruendet haben und Euch auch schon in dieser befinden. Waehlt dann die entsprechende Groesse aus um die Aufwertung zu bekommen.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}

					case 7:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nErst einmal keine Panik. Sollte deine Aufwertung abgelehnt werden, ist entweder ueber deinen Account oder deine IP schon eine Aufwertung erfolgt, der Charakter hat schon eine Aufwertung bekommen oder du hast mehr als 1 Charakter auf diesem Account.\nBeachte bitte: Nur der erste Charakter auf MMOwning darf ausgestattet werden. Solltest du dennoch Probleme haben, gehe bitte ins TS und frage nach Exitare.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}

					case 8:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nDas ist kein Problem. Loesche einfach diesen Charakter und erstelle dir einen neuen. Bedenke aber das du nur 2 Ausstattungen beantragen kannst. Solltest du deinen Charakter also loeschen, hast du nur noch einmal die Moeglichkeit eine Erstaustattung zu beantragen.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}

					case 9:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nUm eine Austattung ueber die gleiche IP vornehmen zu lassen muesst ihr euch BEIDE ins TS begeben. Fragt dort nach einem GM, dieser wird ueberpruefen ob alles fuer eine Ausstattung erfuellt ist und diese dann durchfuehren.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}

					case 11:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nLevel 80 Equipment bedeutet, dass ihr Euch fuer 5000 Gold Level 80 Equipment kaufen koennt. Dies kann mit jedem Character benutzt werden.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}


					case 8000:
					{
						pPlayer->GetGUID();
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System]\nFuer 5000 Gold koennt ihr Euch einen Gutscheincode generieren, welcher Euch direkt zugesendet wird. Es gibt dort komplett zufallsgenerierte Belohnungen.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();
						return true;
					}



					case 2:
					{
						uint32 guid = pPlayer->GetGUID();

						bool gild = pPlayer->GetGuild();

						if (gild)
						{
							QueryResult accountres = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = %u", guid);
							uint32 accountresint = (*accountres)[0].GetUInt32();
							QueryResult charresult = CharacterDatabase.PQuery("Select count(guid) From characters where account = '%u'", accountresint);
							uint32 charresultint = (*charresult)[0].GetUInt32();

							/*Gildenselect*/
							QueryResult guildid = CharacterDatabase.PQuery("SELECT guildid FROM guild_member WHERE guid= %u", guid);
							uint32 guildidint = (*accountres)[0].GetUInt32();

							/*Gildenmemberanzahl*/
							QueryResult guildmember = CharacterDatabase.PQuery("SELECT count(guid) FROM guild_member WHERE guildid = %u", guildidint);
							uint32 guildmemberint = (*guildmember)[0].GetUInt32();


							QueryResult onechar = CharacterDatabase.PQuery("Select count(guid) From first_char where guid = '%u'", guid);
							uint32 onecharint = (*onechar)[0].GetUInt32();

							/*Username*/
							QueryResult guidname = CharacterDatabase.PQuery("SELECT name FROM characters where guid = %u", guid);
							std::string charname = (*guidname)[0].GetString();

							/*Accname*/
							QueryResult accountname = LoginDatabase.PQuery("SELECT username FROM account where id = %u", accountresint);
							std::string accname = (*accountname)[0].GetString();

							QueryResult ipadr = LoginDatabase.PQuery("SELECT last_ip FROM account where id = %u", accountresint);
							std::string ipadrint = (*ipadr)[0].GetString();
							/*IPAdresse auslesen*/
							QueryResult ipadrcount = LoginDatabase.PQuery("SELECT count(last_ip) FROM account WHERE last_ip = '%s'", ipadrint);
							uint32 ipadrcountint = (*ipadrcount)[0].GetUInt32();

							time_t seconds;
							seconds = time(NULL);
							uint32 zeit = seconds;


							/*Acccountanzahl zählen*/
							QueryResult accountanz = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = %u", guid);
							uint32 accountanzint = (*accountanz)[0].GetUInt32();
							QueryResult accountgesanz = CharacterDatabase.PQuery("SELECT count(account) FROM first_char WHERE account = '%u'", accountanzint);
							uint32 accountanzgesint = (*accountgesanz)[0].GetUInt32();

							if (guildmemberint >= 10 && guildmemberint < 25 && charresultint == 1 && ipadrcountint == 1 && onecharint != 1 && accountanzgesint <= 1){
								pPlayer->SetLevel(80);
								pPlayer->LearnDefaultSkill(762, 3);
								pPlayer->TeleportTo(0, -792.84, -1607.55, 142.30, 2.33, 0);
								pPlayer->AddItem(20400, 4);
								pPlayer->SetMoney(50000000);
								pPlayer->UpdateSkillsToMaxSkillsForLevel();
								pPlayer->UpdateSkillsForLevel();

								ss << "|cff54b5ffEine 10er Gildenfirstausstattung wurde von |r " << ChatHandler(pPlayer->GetSession()).GetNameLink() << " |cff54b5ff in Anspruch genommen!|r";
								sWorld->SendGMText(LANG_GM_BROADCAST, ss.str().c_str());
								DBeintrag(pPlayer->GetSession()->GetPlayer(), "Firstaustattung 10er");
								CharacterDatabase.PExecute("REPLACE INTO first_char "
									"(guid,Charname, account, Accname, time, guildid,ip) "
									"VALUES ('%u', '%s', %u, '%s', %u, %u, '%s')",
									guid, charname, accountresint, accname, zeit, guildidint, ipadrint);
                                pPlayer->SaveRecallPosition();
								return true;


							}

							if (onecharint != 1){
								pPlayer->GetSession()->SendNotification("Du hast mehr als einen Charakter auf deinem Account. Es darf nur der ERSTE Charakter ausgestattet werden.");
							}

							if (guildmemberint < 10){
								pPlayer->GetSession()->SendNotification("Deine Gilde hat weniger als 10 Gildenmitglieder.");
							}


							else{
								ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Deine Gilde ist nicht neu, hat nicht genug oder zu viele Mitglieder.",
									pPlayer->GetName());
								pPlayer->PlayerTalkClass->SendCloseGossip();
								return true;
							}


							return true;

						}

						else {
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Tut mir Leid du bist in keiner Gilde.",
								pPlayer->GetName());
							pPlayer->PlayerTalkClass->SendCloseGossip();
							return false;
						}

					}break;


					case 3:
					{
						uint32 guid = pPlayer->GetGUID();
						bool gild = false;
						gild = pPlayer->GetGuild();

						if (gild)
						{
							QueryResult accountres = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = %u", guid);
							uint32 accountresint = (*accountres)[0].GetUInt32();
							QueryResult charresult = CharacterDatabase.PQuery("Select count(guid) From characters where account = '%u'", accountresint);
							uint32 charresultint = (*charresult)[0].GetUInt32();

							/*Gildenselect*/
							QueryResult guildid = CharacterDatabase.PQuery("SELECT guildid FROM guild_member WHERE guid= %u", guid);
							uint32 guildidint = (*accountres)[0].GetUInt32();

							/*Gildenmemberanzahl*/
							QueryResult guildmember = CharacterDatabase.PQuery("SELECT count(guid) FROM guild_member WHERE guildid = %u", guildidint);
							uint32 guildmemberint = (*guildmember)[0].GetUInt32();


							QueryResult onechar = CharacterDatabase.PQuery("Select count(guid) From first_char where guid = '%u'", guid);
							uint32 onecharint = (*onechar)[0].GetUInt32();

							/*Username*/
							QueryResult guidname = CharacterDatabase.PQuery("SELECT name FROM characters where guid = %u", guid);
							std::string charname = (*guidname)[0].GetString();

							/*Accname*/
							QueryResult accountname = LoginDatabase.PQuery("SELECT username FROM account where id = %u", accountresint);
							std::string accname = (*accountname)[0].GetString();


							QueryResult ipadr = LoginDatabase.PQuery("SELECT last_ip FROM account where id = %u", accountresint);
							std::string ipadrint = (*ipadr)[0].GetString();
							/*IPAdresse auslesen*/
							QueryResult ipadrcount = LoginDatabase.PQuery("SELECT count(last_ip) FROM account WHERE last_ip = '%s'", ipadrint);
							uint32 ipadrcountint = (*ipadrcount)[0].GetUInt32();

							/*Acccountanzahl zählen*/
							QueryResult accountanz = CharacterDatabase.PQuery("SELECT account FROM characters WHERE guid = %u", guid);
							uint32 accountanzint = (*accountanz)[0].GetUInt32();
							QueryResult accountgesanz = CharacterDatabase.PQuery("SELECT count(account) FROM first_char WHERE account = '%u'", accountanzint);
							uint32 accountanzgesint = (*accountgesanz)[0].GetUInt32();

							time_t seconds;
							seconds = time(NULL);
							uint32 zeit = seconds;


							if (guildmemberint > 25 && charresultint == 1 && ipadrcountint == 1 && onecharint != 1 && accountanzgesint <= 1){
								pPlayer->SetLevel(80);
								pPlayer->LearnDefaultSkill(762, 4);
								pPlayer->TeleportTo(0, -866.84, -1551.72, 189.62, 0.79, 0);
								pPlayer->AddItem(20400, 4);
								pPlayer->SetMoney(50000000);
								pPlayer->UpdateSkillsToMaxSkillsForLevel();
								pPlayer->UpdateSkillsForLevel();

								ss << "|cff54b5ffEine 25er Gildenfirstausstattung wurde von |r " << ChatHandler(pPlayer->GetSession()).GetNameLink() << " |cff54b5ff in Anspruch genommen!|r";
								sWorld->SendGMText(LANG_GM_BROADCAST, ss.str().c_str());
								CharacterDatabase.PExecute("REPLACE INTO first_char "
									"(guid,Charname, account, Accname, time, guildid,ip) "
									"VALUES ('%u', '%s', %u, '%s', %u, %u, '%s')",
									guid, charname, accountresint, accname, zeit, guildidint, ipadrint);
								DBeintrag(pPlayer->GetSession()->GetPlayer(), "Firstaustattung 25er");
                                pPlayer->SaveRecallPosition();
								return true;
							}

							if (onecharint != 1){
								pPlayer->GetSession()->SendNotification("Du hast mehr als einen Charakter auf deinem Account. Es darf nur der ERSTE Charakter ausgestattet werden.");
							}

							if (guildmemberint < 25){
								pPlayer->GetSession()->SendNotification("Deine Gilde hat weniger als 25 Gildenmitglieder.");
							}

							

							else{
								ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Deine Gilde ist nicht neu, oder hat nicht genug oder zu viele Mitglieder.",
									pPlayer->GetName());
								pPlayer->PlayerTalkClass->SendCloseGossip();
								return true;
							}


							return true;

						}

						else {
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Tut mir Leid du bist in keiner Gilde.",
								pPlayer->GetName());
							pPlayer->PlayerTalkClass->SendCloseGossip();
							return false;
						}
					}break;


					case 4:
					{
						ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Diese Funktion wird noch implementiert.",
							pPlayer->GetName());
						pPlayer->PlayerTalkClass->SendCloseGossip();

						return true;

					}break;



					case 10:
					{

						uint32 guid = pPlayer->GetGUID();
						uint32 acc = pPlayer->GetSession()->GetAccountId();

						if (pPlayer->HasEnoughMoney(5000 * GOLD)){
							pPlayer->GetGUID();
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Deine Aufwertung wurde ausgefuehrt. Viel Spass wuenscht Exitare sowie das MMOwning-Team.",
								pPlayer->GetName());

							ss << "|cff54b5ffEine 2t Ausstattung wurde von |r " << ChatHandler(pPlayer->GetSession()).GetNameLink() << " |cff54b5ff in Anspruch genommen!|r";
							sWorld->SendGMText(LANG_GM_BROADCAST, ss.str().c_str());
							pPlayer->TeleportTo(0, -792.84, -1607.55, 142.30, 2.33, 0);
							pPlayer->PlayerTalkClass->SendCloseGossip();
							pPlayer->ModifyMoney(-5000 * GOLD);
                            pPlayer->SaveRecallPosition();
							std::string name = pPlayer->GetName();

							CharacterDatabase.PExecute("INSERT INTO zweitausstattung "
								"(uid,spieler, account) "
								"VALUES ('%u', '%s', '%u')",
								guid, name, acc);
							DBeintrag(pPlayer->GetSession()->GetPlayer(), "2t Ausstattung");
							return true;
						}

						else {
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Aufwertungs System] Du hast nicht genug Gold. Du brauchst 5000 Gold um dir dein Equipment zu kaufen.",
								pPlayer->GetName());

						}

						return true;
					}break;


					case 12:
					{


						pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
						pPlayer->PlayerTalkClass->ClearMenus();

						pPlayer->ADD_GOSSIP_ITEM(7, "Bergbau", GOSSIP_SENDER_MAIN, 13);
						pPlayer->ADD_GOSSIP_ITEM(7, "Schneiderei", GOSSIP_SENDER_MAIN, 14);
						pPlayer->ADD_GOSSIP_ITEM(7, "Schmiedekunst", GOSSIP_SENDER_MAIN, 15);
						pPlayer->ADD_GOSSIP_ITEM(7, "Kraeuterkunde", GOSSIP_SENDER_MAIN, 16);
						pPlayer->ADD_GOSSIP_ITEM(7, "Kuerschner", GOSSIP_SENDER_MAIN, 17);
						pPlayer->ADD_GOSSIP_ITEM(7, "Lederer", GOSSIP_SENDER_MAIN, 18);
						pPlayer->ADD_GOSSIP_ITEM(7, "Juwelierskunst", GOSSIP_SENDER_MAIN, 19);
						pPlayer->ADD_GOSSIP_ITEM(7, "Alchemie", GOSSIP_SENDER_MAIN, 20);
						pPlayer->ADD_GOSSIP_ITEM(7, "Verzauberkunst", GOSSIP_SENDER_MAIN, 21);
						pPlayer->ADD_GOSSIP_ITEM(7, "Inschriftenkunde", GOSSIP_SENDER_MAIN, 9000);
						pPlayer->ADD_GOSSIP_ITEM(7, "Ingenieurskunst", GOSSIP_SENDER_MAIN, 9001);
                        pPlayer->ADD_GOSSIP_ITEM(7, "Zu den Features", GOSSIP_SENDER_MAIN, 25);
                        
						pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
						return true;

					}break;


					

					//Bergbau
					case 13:
					{
						
						Berufeskillen(pPlayer->GetSession()->GetPlayer(),186);
					
					}break;

					//Schneiderei
					case 14:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 197);
						
					}break;


					//Schmiedekunst
					case 15:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 164);
						
					}break;


					//Kraeuterkunde
					case 16:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 182);
						
					}break;


					//Kürschner
					case 17:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 393);
						
					}break;


					//Lederer
					case 18:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 165);
						
					}break;


					//Juwe
					case 19:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 755);
						
					}break;



					//Alchemie
					case 20:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 171);
						
					}break;


					//VZ
					case 21:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 333);
						
					}break;

					//Inschriftler
					case 9000:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 773);

					}break;

					//Ingi
					case 9001:
					{
						Berufeskillen(pPlayer->GetSession()->GetPlayer(), 202);

					}break;


					//XP Boost
					case 22:
					{
						

						pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
						pPlayer->PlayerTalkClass->ClearMenus();
						pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 1 Stunde Kosten: 500 Gold", GOSSIP_SENDER_MAIN, 6000);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 2 Stunden Kosten: 800 Gold", GOSSIP_SENDER_MAIN, 6001);
						pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 5 Stunden Kosten: 1500 Gold", GOSSIP_SENDER_MAIN, 6002);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 10 Stunden Kosten: 2000 Gold", GOSSIP_SENDER_MAIN, 6003);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 1 Tag Kosten: 4000 Gold", GOSSIP_SENDER_MAIN, 6004);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 2 Tage Kosten: 5000 Gold", GOSSIP_SENDER_MAIN, 6005);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 5 Tage Kosten: 7500 Gold", GOSSIP_SENDER_MAIN, 6006);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP Boost: 10 Tage Kosten: 10000 Gold", GOSSIP_SENDER_MAIN, 6007);
                        
						pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
						return true;

					}break;
                    
                        
                    case 6000:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 500, 3600);
                    }break;
                    
                    case 6001:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 800, 7200);
                    }break;
                            
                    case 6002:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 1500, 18000);
                    }break;
                        
                    case 6003:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 2000, 36000);
                    }break;
                            
                    case 6004:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 4000, 86400);
                    }break;
                    
                    case 6005:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 5000, 172800);
                    }break;
                            
                    case 6006:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 7500, 432000);
                    }break;
                            
                    case 6007:
                    {
                        Bonusep(pPlayer->GetSession()->GetPlayer(), 10000, 864000);
                    }break;
                            
                            
					case 23:
					{
						if (pPlayer->HasEnoughMoney(5000 * GOLD)){
							pPlayer->ModifyMoney(-5000 * GOLD);
							srand(time(NULL));
							int r = rand();

							std::string grund = "Gutschein";

							uint32 anzahl = 1 + (std::rand() % (5 - 1 + 1));

							if (r % 5 == 0){
								fixgutschein(pPlayer->GetSession()->GetPlayer(), ASTRALER_KREDIT, anzahl,grund);
							}

							if (r % 5 == 1){
								CharacterDatabase.PExecute("INSERT INTO item_codes (code,belohnung,anzahl,benutzt,name,benutztbar) Values ('%s','%u','%u','%u','%s')", grund, 9999, anzahl, 1, pPlayer->GetName(),1);
								
								pPlayer->GetSession()->SendNotification("Dein Code wurde generiert und die Belohnung zugesendet!");
								SQLTransaction trans = CharacterDatabase.BeginTransaction();
								MailDraft("Dein Gutscheincode", "Dein Code wurde erfolgreich eingeloest. Wir wuenschen dir weiterhin viel Spass auf MMOwning. Dein MMOwning-Team").AddMoney(5500 * GOLD)
									.SendMailTo(trans, MailReceiver(pPlayer, pPlayer->GetGUID()), MailSender(MAIL_NORMAL, 0, MAIL_STATIONERY_GM));
								CharacterDatabase.CommitTransaction(trans);
							}

							if (r % 5 == 2){
								fixgutschein(pPlayer->GetSession()->GetPlayer(), FROSTMARKEN, anzahl, grund);
							}

							if (r % 5 == 3){	
								fixgutschein(pPlayer->GetSession()->GetPlayer(), TRIUMPHMARKEN, anzahl, grund);
							}

							if (r % 5 == 4){
								fixgutschein(pPlayer->GetSession()->GetPlayer(), TITANSTAHLBARREN, anzahl, grund);
							}
						}

						else {
							pPlayer->GetSession()->SendNotification("Du hast zu wenig Gold um dir einen Gutschein zu generieren.");
						}


					}break;

					case 25:
					{
						pPlayer->PlayerTalkClass->ClearMenus();
						pPlayer->ADD_GOSSIP_ITEM(7, "Level 80 Equipment. [Kosten: 5000G]", GOSSIP_SENDER_MAIN, 10);
						pPlayer->ADD_GOSSIP_ITEM(7, "Berufe skillen [Kosten: 3000 Gold]", GOSSIP_SENDER_MAIN, 12);
						pPlayer->ADD_GOSSIP_ITEM(7, "Gutschein generieren [Kosten: 5000G]", GOSSIP_SENDER_MAIN, 23);
						pPlayer->ADD_GOSSIP_ITEM(7, "Gutschein zum Verschenken generieren [Kosten: Premium 5000 / Normal 10.000]", GOSSIP_SENDER_MAIN, 24);
						pPlayer->ADD_GOSSIP_ITEM(7, "Level kaufen", GOSSIP_SENDER_MAIN, 9500);
                        pPlayer->ADD_GOSSIP_ITEM(7, "XP-BOOST", GOSSIP_SENDER_MAIN, 22);
						
						if (pPlayer->GetSession()->GetSecurity() == 3){	
							
							pPlayer->ADD_GOSSIP_ITEM(7, "Aufwertungen einsehen", GOSSIP_SENDER_MAIN, 4);
							pPlayer->ADD_GOSSIP_ITEM(7, "MMO Bonus", GOSSIP_SENDER_MAIN, 9504);
						}

						pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
						return true;
					}break;

					case 24:
					{
                        if(pPlayer->GetSession()->IsPremium() && pPlayer->HasEnoughMoney(5000 * GOLD)){
                            
                            pPlayer->ModifyMoney(5000*GOLD);
                            gutscheineverteilen(pPlayer->GetSession()->GetPlayer());
                             
                        }
                        
						if (pPlayer->HasEnoughMoney(10000 * GOLD) && !pPlayer->GetSession()->IsPremium()){
                           
                            pPlayer->ModifyMoney(-10000 * GOLD);
                            gutscheineverteilen(pPlayer->GetSession()->GetPlayer());

						}
							
						else{
							pPlayer->GetSession()->SendNotification("Du hast nicht genug Gold.");
							ChatHandler(pPlayer->GetSession()).PSendSysMessage("[Gutschein System] Du hast nicht genug Gold. Als Besitzer eines Eliteaccounts brauchst du 5000 Gold als normaler Spieler 10.000 Gold.",
								pPlayer->GetName());
						}
					
                    }break;
                            
                    
                    case 9500:
                    {
                        pPlayer->PlayerTalkClass->ClearMenus();
						
						if (pPlayer->getLevel() < 80)
						{
							pPlayer->ADD_GOSSIP_ITEM(7, "1 Level aufsteigen. Kosten: 1 Astrale Kredite", GOSSIP_SENDER_MAIN, 9501);
							pPlayer->ADD_GOSSIP_ITEM(7, "10 Level aufsteigen.  Kosten: 5 Astrale Kredite.", GOSSIP_SENDER_MAIN, 9502);
							pPlayer->ADD_GOSSIP_ITEM(7, "Auf Level 80 setzen.  Kosten: 40 Astrale Kredite.", GOSSIP_SENDER_MAIN, 9503);
                            
                        }
						else {
							pPlayer->GetSession()->SendNotification("Du bist schon Level 80.");
						}

                        pPlayer->ADD_GOSSIP_ITEM(7, "Zu den Features", GOSSIP_SENDER_MAIN, 25);
                        pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                        return true;
                        

                    }break;
                            
                    case 9501:
                    {
                            
                        levelup(pPlayer, 1, 79, 1);
						
                        return true;
                            
                    }break;
                            
                        
                    case 9502:
                    {
                        
                        levelup(pPlayer, 5, 70, 10);
						
                        return true;
                            
                    }break;
                            
                            
                    case 9503:
                    {
                        uint16 abstand = 80 - pPlayer->getLevel();
                        // abstand ist der abstand des Spielerlevels zu Level 80
                            
                        levelup(pPlayer, 40, 80, abstand);
                        return true;
                            
                    }break;

					
					case 9504:
					{
						if (pPlayer->HasItemOrGemWithIdEquipped(700523, 1, 4)){
							pPlayer->GetSession()->SendNotification("Du bist Besitzer des Wappenrockes des Wandervolkes! Ich verneige mich vor dir.");
							return true;
						}
						return true;

					}break;

					}
					return true;
				}