// =============================
/* Change Guild Leader: http://herc.ws/board/topic/13842-safely-transfer-guild-master/
----------------------------
by: Legend
compatible w/: Hercules
----------------------------
Version: 1.2
* Fixed wrong variable usage
* Query through sql than "getguild***" functions
to allow query without old guild leader to be online.
* Added delay after guild leader transfer since we
are using sql query which has certain seconds before it
updates. (for safety purposes)
----------------------------
special thanks to:
* Dastgir (for pointing out the wrong variable usage)
----------------------------
Description:
* Allows Game Masters to safely transfer
guild leader ownership to any members of the guild.
* Can be triggered through "@guild" command or
can also be triggered through NPC click.
* Be careful and you must check the correct spelling of the name before
proceeding ( Upper & lower case letters and etc.)
* No need for the old guild leader to be online.
* New guild leader must be online.
* Certain checks were applied for safe transfer purpose.
----------------------------
Comments:
Please report if bugs were found.
Drop me a message: http://herc.ws/board/user/5387-legend/
*/
// =============================
prontera,159,173,4 script Request#4 4_M_KNIGHT_GOLD,{
doevent "Request#4::OnMain";
end;
OnMain:
if (getgmlevel() < .reqlvl) {
mes .npc$;
mes "You are not allowed to use this.";
close;
}
mes .npc$;
mes "Please provide the ^FF0000old^000000 guild leader name of the character correctly.";
mes "^FF0000NOTE^000000:";
mes "^FF0000-^000000 Double check the spelling.";
mes "^FF0000-^000000 The character name you";
mes " will be providing should";
mes " be a guild leader.";
mes "^FF0000-^000000 New Guild leader should be online.";
input .@char$;
next;
.@check = query_sql("SELECT `account_id` FROM `char` WHERE `name`='"+escape_sql(.@char$)+"'",.@acid);
if (!.@check) {
mes .npc$;
mes "Character [ ^FF0000"+.@char$+"^000000 ] doesn't exist!";
close;
}
query_sql("SELECT `guild_id` FROM `char` WHERE `name`='"+escape_sql(.@char$)+"'",.@gldid);
if (!.@gldid){
mes .npc$;
mes "Character [ ^FF0000"+.@char$+"^000000 ] isn't registered to any guild!";
close;
}
if (.gcdone == .@gldid){
if ( .delay > gettimetick(2) ){
mes .npc$;
mes "You must wait [^FF0000"+(.delay - gettimetick(2))+"^000000] seconds,";
mes .@char$+"'s guild has been currently";
mes "modified and changed their";
mes "guild leader authority.";
close;
}
}
query_sql("SELECT `name` , `master` , `guild_lv` FROM `guild` WHERE `guild_id` = '"+.@gldid+"'",.@gname$,.@gldmstr$,.@glvl);
if (.@char$ != .@gldmstr$){
mes .npc$;
mes "Character [ ^FF0000"+.@char$+"^000000 ] isn't a guild master!";
close;
}
mes .npc$;
mes "Information:";
mes "Guild Name: ^ff0000"+.@gname$+"^000000";
mes "Guild Level: ^ff0000"+.@glvl+"^000000";
mes "Guild Master: ^ff0000"+.@gldmstr$+"^000000";
mes "Master, what would like to do?";
next;
switch(select("Change Guild Leader:Cancel")){
case 1:
mes .npc$;
mes "Are you sure you wanted to change the guild leader?";
next;
if (select("Yes","No") != 2){
mes .npc$;
mes "Enter the ^FF0000new^000000 guild leader's name.";
input .@cgl$;
next;
mes .npc$;
mes "Please ^FF0000re-enter^000000 the name again for confirmation.";
input .@cgl2$;
next;
if (.@cgl$ != .@cgl2$) {
mes .npc$;
mes "The names you entered doesn't match.";
close;
}
.@check = query_sql("SELECT `account_id` FROM `char` WHERE `name`='"+escape_sql(.@cgl$)+"'",.@acid);
if (!.@check){
mes .npc$;
mes "Character [ ^FF0000"+.@cgl$+"^000000 ] doesn't exist!";
close;
}
if (.@cgl$ == .@char$) {
mes .npc$;
mes "Character [ ^FF0000"+.@cgl$+"^000000 ] is already the leader of [ ^FF0000"+.@gname$+"^000000 ] Guild.";
close;
}
if (!isloggedin(getcharid(3,.@cgl$), getcharid(0,.@cgl$))){
mes .npc$;
mes "Character [ ^FF0000"+.@cgl$+"^000000 ] must be online to proceed!";
close;
}
if (getcharid(2,.@cgl$) != .@gldid){
mes .npc$;
mes "Character [ ^FF0000"+.@cgl$+"^000000 ] is not a member of [ ^FF0000"+.@gname$+"^000000 ] Guild.";
close;
}
mes .npc$;
mes "Please confirm the following details before we proceed,";
mes "Current Leader: ^FF0000"+.@char$+"^000000";
mes "New Leader: ^FF0000"+.@cgl$+"^000000";
mes "Would you like to proceed?";
next;
if (select("Close","^FF0000Confirmed^000000!") != 1) {
close2;
if (.gcdone == .@gldid){
if ( .delay > gettimetick(2) ){
message strcharinfo(0), "Transfer failed!";
mes .npc$;
mes "You must wait [^FF0000"+(.delay - gettimetick(2))+"^000000] seconds,";
mes .@char$+"'s guild has been currently";
mes "modified and changed their";
mes "guild leader authority.";
close;
}
}
message strcharinfo(0), "You have succesfully transferred the guild!";
announce strcharinfo(0)+" : The [ "+.@gname$+" ] Guild previously owned by "+.@char$+" succesfully transferred its ownership to "+.@cgl$+"!",bc_all,0xe57c00;
guildchangegm(.@gldid,.@cgl$);
.gcdone = .@gldid;
if (.d)
.delay = gettimetick(2) + .d;
sleep2 1000;
if (isloggedin(getcharid(3,.@cgl$), getcharid(0,.@cgl$))){
atcommand "@kick "+.@cgl$;
}
if (isloggedin(getcharid(3,.@char$), getcharid(0,.@char$))){
atcommand "@kick "+.@char$;
}
end;
}
close;
}
close;
case 2:
close;
}
OnInit:
.reqlvl = 99; // Allowed GM level to use the NPC.
.npc$ = "[ Guild Manager ]"; // You can change the NPC name through this.
// -- PLEASE DO NOT TOUCH THIS(FOR SAFETY PURPOSE). --
.d = 60; // delay in seconds.
bindatcmd "guild",strnpcinfo(3)+"::OnMain",.reqlvl,.reqlvl;
end;
}