void GuildApproval::GuildApproved() { char petitext[PBUFFER] = "A new guild was founded! Guildname: "; char gmembers[MBUFFER] = " "; if(!owner) return; database.GetVariable("GuildCreation", founders, 3); uint8 tmp = atoi(founders); uint32 tmpeq = guild_mgr.CreateGuild(guild, owner->CharacterID()); guild_mgr.SetGuild(owner->CharacterID(),tmpeq,2); owner->SendAppearancePacket(AT_GuildID,true,false); for(int i=0;i<tmp;i++) { if(members[i]) { owner->Message(CC_Default, "%s",members[i]->GetName()); owner->Message(CC_Default, "%i",members[i]->CharacterID()); guild_mgr.SetGuild(members[i]->CharacterID(),tmpeq,0); size_t len = MBUFFER - strlen(gmembers)+1; strncat(gmembers," ",len); strncat(gmembers,members[i]->GetName(),len); } } size_t len = PBUFFER - strlen(petitext)+1; strncat(petitext,guild,len); strncat(petitext," Leader: ",len); strncat(petitext,owner->CastToClient()->GetName(),len); strncat(petitext," Members:",len); strncat(petitext,gmembers,len); Petition* pet = new Petition(owner->CastToClient()->CharacterID()); pet->SetAName(owner->CastToClient()->AccountName()); pet->SetClass(owner->CastToClient()->GetClass()); pet->SetLevel(owner->CastToClient()->GetLevel()); pet->SetCName(owner->CastToClient()->GetName()); pet->SetRace(owner->CastToClient()->GetRace()); pet->SetLastGM(""); pet->SetCName(owner->CastToClient()->GetName()); //aza77 is this really 2 times needed ?? pet->SetPetitionText(petitext); pet->SetZone(zone->GetZoneID()); pet->SetUrgency(0); petition_list.AddPetition(pet); database.InsertPetitionToDB(pet); petition_list.UpdateGMQueue(); petition_list.UpdateZoneListQueue(); worldserver.SendEmoteMessage(0, 0, 80, 15, "%s has made a petition. #%i", owner->CastToClient()->GetName(), pet->GetID()); ServerPacket* pack = new ServerPacket; pack->opcode = ServerOP_RefreshGuild; pack->size = tmp; pack->pBuffer = new uchar[pack->size]; memcpy(pack->pBuffer, &tmpeq, 4); worldserver.SendPacket(pack); safe_delete(pack); owner->Message(CC_Default, "Your guild was created."); owner = 0; }
void Client::GuildCommand(Seperator* sep) { zgm.LoadGuilds(); Guild_Struct* guilds = zgm.GetGuildList(); if (strcasecmp(sep->arg[1], "help") == 0) { this->GuildPCCommandHelp(); this->GuildGMCommandHelp(); } else if (strcasecmp(sep->arg[1], "status") == 0 || strcasecmp(sep->arg[1], "stat") == 0) { Client* client = 0; if (sep->arg[2][0] != 0) { client = entity_list.GetClientByName(sep->argplus[2]); } else if (target != 0 && target->IsClient()) { client = target->CastToClient(); } if (client == 0) { this->Message(BLACK, "You must target someone or specify a character name"); } else if ((client->Admin() >= 100 && admin < 100) && client->GuildDBID() != guilddbid) // no peeping for GMs, make sure tell message stays the same { this->Message(BLACK, "You must target someone or specify a character name."); } else { if (client->GuildDBID() == 0) { this->Message(BLACK, "%s is not in a guild.", client->GetName()); } else if (guilds[client->GuildEQID()].leader == client->AccountID()) { this->Message(BLACK, "%s is the leader of <%s> rank: %s", client->GetName(), guilds[client->GuildEQID()].name, guilds[client->GuildEQID()].rank[client->GuildRank()].rankname); } else { this->Message(BLACK, "%s is a member of <%s> rank: %s", client->GetName(), guilds[client->GuildEQID()].name, guilds[client->GuildEQID()].rank[client->GuildRank()].rankname); } } } else if (strcasecmp(sep->arg[1], "info") == 0) { if (sep->arg[2][0] == 0 && guilddbid == 0) { if (admin >= 100) { this->Message(BLACK, "Usage: #guildinfo guilddbid"); } else { this->Message(BLACK, "You're not in a guild"); } } else { int32 tmp; if (sep->arg[2][0] == 0) { tmp = Database::Instance()->GetGuildEQID(guilddbid); } else { tmp = Database::Instance()->GetGuildEQID(atoi(sep->arg[2])); } if (tmp < 0 || tmp >= 512) { this->Message(BLACK, "Guild not found."); } else { this->Message(BLACK, "Guild info DB# %i, %s", guilds[tmp].databaseID, guilds[tmp].name); if (this->admin >= 100 || guildeqid == tmp) { if (this->account_id == guilds[tmp].leader || guildrank == 0 || admin >= 100) { char leadername[32]; Database::Instance()->GetAccountName(guilds[tmp].leader, leadername); this->Message(BLACK, "Guild Leader: %s", leadername); } for (int i = 0; i <= GUILD_MAX_RANK; i++) { this->Message(BLACK, "Rank %i: %s", i, guilds[tmp].rank[i].rankname); this->Message(BLACK, " HearGU: %i SpeakGU: %i Invite: %i Remove: %i Promote: %i Demote: %i MOTD: %i War/Peace: %i", guilds[tmp].rank[i].heargu, guilds[tmp].rank[i].speakgu, guilds[tmp].rank[i].invite, guilds[tmp].rank[i].remove, guilds[tmp].rank[i].promote, guilds[tmp].rank[i].demote, guilds[tmp].rank[i].motd, guilds[tmp].rank[i].warpeace); } } } } } else if (strcasecmp(sep->arg[1], "leader") == 0) { if (guilddbid == 0) { this->Message(BLACK, "You arent in a guild!"); } else if (guilds[guildeqid].leader != account_id) { this->Message(BLACK, "You aren't the guild leader."); } else { char* tmptar = 0; if (sep->arg[2][0] != 0) { tmptar = sep->argplus[2]; } else if (tmptar == 0 && target != 0 && target->IsClient()) { tmptar = target->CastToClient()->GetName(); } if (tmptar == 0) { Message(BLACK, "You must target someone or specify a character name."); } else { // Dark-Prince - 10/05/2008 - Code Consolidation //zgm.InviteToGuild( //this->SendGuildInvitePacket(tmptar); } } } else if (strcasecmp(sep->arg[1], "invite") == 0) { int32 GuildDBID = atoi(sep->arg[2]); Client* Invitee = entity_list.GetClientByName(sep->arg[3]); GUILDRANK Rank = (GUILDRANK)atoi(sep->arg[4]); int32 GuidlEQID = Database::Instance()->GetGuildEQID(GuildDBID); zgm.InviteToGuild(GuildDBID, GuidlEQID, this, Invitee, Rank); } else if (strcasecmp(sep->arg[1], "remove") == 0) { Client* Removee = entity_list.GetClientByName(sep->arg[2]); if(Removee != 0) { zgm.RemovePCFromGuild(this, Removee); } } else if (strcasecmp(sep->arg[1], "promote") == 0) { if (guilddbid == 0) { Message(BLACK, "You arent in a guild!"); } else if (!(strlen(sep->arg[2]) == 1 && sep->arg[2][0] >= '0' && sep->arg[2][0] <= '9')) { Message(BLACK, "Usage: #guild promote rank [charname]"); } else if (atoi(sep->arg[2]) < 0 || atoi(sep->arg[2]) > GUILD_MAX_RANK) { Message(BLACK, "Error: invalid rank #."); } else { char* tmptar = 0; if (sep->arg[3][0] != 0) { tmptar = sep->argplus[3]; } else if (tmptar == 0 && target != 0 && target->IsClient()) { tmptar = target->CastToClient()->GetName(); } if (tmptar == 0) { Message(BLACK, "You must target someone or specify a character name."); } else { zgm.SendGuildPromotePacket(tmptar, this->GetName()); } } } else if (strcasecmp(sep->arg[1], "demote") == 0) { if (guilddbid == 0) { Message(BLACK, "You arent in a guild!"); } else if (!(strlen(sep->arg[2]) == 1 && sep->arg[2][0] >= '0' && sep->arg[2][0] <= '9')) { Message(BLACK, "Usage: #guild demote rank [charname]"); } else if (atoi(sep->arg[2]) < 0 || atoi(sep->arg[2]) > GUILD_MAX_RANK) { Message(BLACK, "Error: invalid rank #."); } else { char* tmptar = 0; if (sep->arg[3][0] != 0) { tmptar = sep->argplus[3]; } else if (tmptar == 0 && target != 0 && target->IsClient()) { tmptar = target->CastToClient()->GetName(); } if (tmptar == 0) { Message(BLACK, "You must target someone or specify a character name."); } else { zgm.SendGuildDemotePacket(tmptar); } } } else if (strcasecmp(sep->arg[1], "motd") == 0) { if (guilddbid == 0) { Message(BLACK, "You arent in a guild!"); } else if (!guilds[guildeqid].rank[guildrank].motd) { Message(BLACK, "You dont have permission to change the motd."); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { char tmp[255]; if (strcasecmp(sep->argplus[2], "none") == 0) { strcpy(tmp, ""); } else { snprintf(tmp, sizeof(tmp), "%s - %s", this->GetName(), sep->argplus[2]); } if (Database::Instance()->SetGuildMOTD(guilddbid, tmp)) { // Dark-Prince - 10/05/2008 - Code Consolidation /* ServerPacket* pack = new ServerPacket; pack->opcode = ServerOP_RefreshGuild; pack->size = 5; pack->pBuffer = new uchar[pack->size]; memcpy(pack->pBuffer, &guildeqid, 4); worldserver.SendPacket(pack); safe_delete(pack);//delete pack; */ } else { this->Message(BLACK, "Motd update failed."); } } } else if (strcasecmp(sep->arg[1], "edit") == 0) { if (guilddbid == 0) { Message(BLACK, "You arent in a guild!"); } else if (!sep->IsNumber(2)) { Message(BLACK, "Error: invalid rank #."); } else if (atoi(sep->arg[2]) < 0 || atoi(sep->arg[2]) > GUILD_MAX_RANK) { Message(BLACK, "Error: invalid rank #."); } else if (!guildrank == 0) { Message(BLACK, "You must be rank %s to use edit.", guilds[guildeqid].rank[0].rankname); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { if (!GuildEditCommand(guilddbid, guildeqid, atoi(sep->arg[2]), sep->arg[3], sep->argplus[4])) { Message(BLACK, " #guild edit rank title newtitle"); Message(BLACK, " #guild edit rank permission 0/1"); } else { zgm.SendGuildRefreshPacket(guildeqid); } } } // Start of GM Guild Commands else if (strcasecmp(sep->arg[1], "gmedit") == 0 && admin >= 100) { if (!sep->IsNumber(2)) { Message(BLACK, "Error: invalid guilddbid."); } else if (!sep->IsNumber(3)) { Message(BLACK, "Error: invalid rank #."); } else if (atoi(sep->arg[3]) < 0 || atoi(sep->arg[3]) > GUILD_MAX_RANK) { Message(BLACK, "Error: invalid rank #."); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { int32 eqid = Database::Instance()->GetGuildEQID(atoi(sep->arg[2])); if (eqid == 0xFFFFFFFF) { Message(BLACK, "Error: Guild not found"); } else if (!GuildEditCommand(atoi(sep->arg[2]), eqid, atoi(sep->arg[3]), sep->arg[4], sep->argplus[5])) { Message(BLACK, " #guild gmedit guilddbid rank title newtitle"); Message(BLACK, " #guild gmedit guilddbid rank permission 0/1"); } else { zgm.SendGuildRefreshPacket(eqid); } } } else if (strcasecmp(sep->arg[1], "set") == 0 && admin >= 100) { if (!sep->IsNumber(3)) { Message(BLACK, "Usage: #guild set charname guildgbid (0 = clear guildtag)"); } else { /* -- Work in progress GUILDRANK rank = GuildMember; Client* c = entity_list.GetClientByName(sep->arg[2]); if(c == 0) { Message(BLACK, "Player not found!"); return; } int GuidDBID = atoi(sep->arg[3]); if(sep->IsNumber(4)) { rank = (GUILDRANK)atoi(sep->arg[4]); } zgm.LoadGuilds(); int32 GuidEQID = Database::Instance()->GetGuildEQID(GuidDBID); zgm.InviteToGuild(GuidDBID, GuidEQID, this, c, rank); */ ServerPacket* pack = new ServerPacket(ServerOP_GuildGMSet, sizeof(ServerGuildCommand_Struct)); pack->pBuffer = new uchar[pack->size]; memset(pack->pBuffer, 0, pack->size); ServerGuildCommand_Struct* sgc = (ServerGuildCommand_Struct*) pack->pBuffer; sgc->guilddbid = atoi(sep->arg[3]); sgc->admin = admin; strcpy(sgc->from, name); strcpy(sgc->target, sep->arg[2]); worldserver.SendPacket(pack); safe_delete(pack);//delete pack; } } else if (strcasecmp(sep->arg[1], "setrank") == 0 && admin >= 100) { if (!sep->IsNumber(3)) { Message(BLACK, "Usage: #guild setrank charname rank"); } else if (atoi(sep->arg[3]) < 0 || atoi(sep->arg[3]) > GUILD_MAX_RANK) { Message(BLACK, "Error: invalid rank #."); } else { ServerPacket* pack = new ServerPacket(ServerOP_GuildGMSetRank, sizeof(ServerGuildCommand_Struct)); pack->pBuffer = new uchar[pack->size]; memset(pack->pBuffer, 0, pack->size); ServerGuildCommand_Struct* sgc = (ServerGuildCommand_Struct*) pack->pBuffer; sgc->newrank = (GUILDRANK)atoi(sep->arg[3]); sgc->admin = admin; strcpy(sgc->from, name); strcpy(sgc->target, sep->arg[2]); worldserver.SendPacket(pack); target->CastToClient()->SetGuild(target->CastToClient()->guilddbid, sgc->newrank); safe_delete(pack);//delete pack; } } /* New Guild Creation -> Challenge/Response method */ else if (strcasecmp(sep->arg[1], "dpcreate") == 0 && admin >= 100) { if (sep->arg[3][0] == 0) { Message(BLACK, "Usage: #guild create {guildleader charname or AccountID} guild name"); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { zgm.CreateGuildRequest(this, sep->arg[2], sep->argplus[3]); } } /* END New Guild Creation -> Challenge/Response method */ else if (strcasecmp(sep->arg[1], "create") == 0 && admin >= 100) { if (sep->arg[3][0] == 0) { Message(BLACK, "Usage: #guild create {guildleader charname or AccountID} guild name"); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { Client* Leader = entity_list.GetClientByName(sep->arg[2]); int32 guilddbid = 0; if(Leader != 0) { zgm.CreateGuild(this, Leader, sep->argplus[3], guilddbid); } } } else if (strcasecmp(sep->arg[1], "delete") == 0 && admin >= 100) { if (!sep->IsNumber(2)) { Message(BLACK, "Usage: #guild delete guildDBID"); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { int32 tmpeq = Database::Instance()->GetGuildEQID(atoi(sep->arg[2])); char tmpname[32]; if (tmpeq != 0xFFFFFFFF) { strcpy(tmpname, guilds[tmpeq].name); } if (!Database::Instance()->DeleteGuild(atoi(sep->arg[2]))) { Message(BLACK, "Guild delete failed."); } else { if (tmpeq != 0xFFFFFFFF) { zgm.LoadGuilds(); ServerPacket* pack = new ServerPacket(ServerOP_RefreshGuild, 5); pack->pBuffer = new uchar[pack->size]; memcpy(pack->pBuffer, &tmpeq, 4); pack->pBuffer[4] = 1; worldserver.SendPacket(pack); safe_delete(pack);//delete pack; Message(BLACK, "Guild deleted: DB# %i, EQ# %i: %s", atoi(sep->arg[2]), tmpeq, tmpname); } else { Message(BLACK, "Guild deleted: DB# %i", atoi(sep->arg[2])); } } } } else if (strcasecmp(sep->arg[1], "rename") == 0 && admin >= 100) { if ((!sep->IsNumber(2)) || sep->arg[3][0] == 0) { Message(BLACK, "Usage: #guild rename guildDBID newname"); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { int32 tmpeq = Database::Instance()->GetGuildEQID(atoi(sep->arg[2])); char tmpname[32]; if (tmpeq != 0xFFFFFFFF) { strcpy(tmpname, guilds[tmpeq].name); } if (!Database::Instance()->RenameGuild(atoi(sep->arg[2]), sep->argplus[3])) { Message(BLACK, "Guild rename failed."); } else { if (tmpeq != 0xFFFFFFFF) { ServerPacket* pack = new ServerPacket(ServerOP_RefreshGuild, 5); pack->pBuffer = new uchar[pack->size]; memcpy(pack->pBuffer, &tmpeq, 4); pack->pBuffer[4] = 1; worldserver.SendPacket(pack); safe_delete(pack);//delete pack; Message(BLACK, "Guild renamed: DB# %i, EQ# %i, OldName: %s, NewName: %s", atoi(sep->arg[2]), tmpeq, tmpname, sep->argplus[3]); } else { Message(BLACK, "Guild renamed: DB# %i, NewName: %s", atoi(sep->arg[2]), sep->argplus[3]); } } } } else if (strcasecmp(sep->arg[1], "setleader") == 0 && admin >= 100) { if (sep->arg[3][0] == 0 || !sep->IsNumber(2)) { Message(BLACK, "Usage: #guild setleader guilddbid {guildleader charname or AccountID}"); } else if (!worldserver.Connected()) { Message(BLACK, "Error: World server dirconnected"); } else { int32 leader = 0; if (sep->IsNumber(3)) { leader = atoi(sep->arg[3]); } else { leader = Database::Instance()->GetAccountIDByChar(sep->argplus[3]); } int32 tmpdb = Database::Instance()->GetGuildDBIDbyLeader(leader); if (leader == 0) { Message(BLACK, "New leader not found."); } else if (tmpdb != 0) { int32 tmpeq = Database::Instance()->GetGuildEQID(tmpdb); if (tmpeq >= 512) { Message(BLACK, "Error: %s already is the leader of DB# %i.", sep->argplus[3], tmpdb); } else { Message(BLACK, "Error: %s already is the leader of DB# %i <%s>.", sep->argplus[3], tmpdb, guilds[tmpeq].name); } } else { int32 tmpeq = Database::Instance()->GetGuildEQID(atoi(sep->arg[2])); if (tmpeq == 0xFFFFFFFF) { Message(BLACK, "Guild not found."); } else if (!Database::Instance()->SetGuildLeader(atoi(sep->arg[2]), leader)) { Message(BLACK, "Guild leader change failed."); } else { zgm.SendGuildRefreshPacket(tmpeq); Message(BLACK, "Guild leader changed: DB# %s, Leader: %s, Name: <%s>", sep->arg[2], sep->argplus[3], guilds[tmpeq].name); } } } } else if (strcasecmp(sep->arg[1], "list") == 0 && admin >= 100) { int x = 0; Message(BLACK, "Listing guilds on the server:"); char leadername[32]; int magicnumber = 512; zgm.LoadGuilds(); guilds = zgm.GetGuildList(); for (int i = 0; i < magicnumber; i++) { if (guilds[i].databaseID != 0) { leadername[0] = 0; Database::Instance()->GetAccountName(guilds[i].leader, leadername); if (leadername[0] == 0) { Message(BLACK, " DB# %i EQ# %i <%s>", guilds[i].databaseID, i, guilds[i].name); } else { Message(BLACK, " DB# %i EQ# %i <%s> Leader: %s", guilds[i].databaseID, i, guilds[i].name, leadername); } x++; } } Message(BLACK, "%i guilds listed.", x); } else if (strcasecmp(sep->arg[1], "reload") == 0 && admin >= 100) { Message(BLACK, "Reloading Guilds"); int32 eqdbid = atoi(sep->arg[2]); zgm.LoadGuilds(); zgm.SendGuildRefreshPacket(eqdbid); } else { Message(BLACK, "Unknown guild command, try #guild help"); } }