//===== eAthena Script =======================================
//= User Account Editor
//===== By ===================================================
//= lllchrislll
//===== Version ==============================================
//= 1.0 - Script Made
// - Added Reset Equip
// - Added Change Slot
// - Fixed Change Slot Bug
// Changed from Menu > input
//= 1.1 - Fixxed minor Bugs
//= 1.2 - Fixxed small bug, Showing Online Player was bugged
// - Also reversed order of menu outputs (was pissing me off q.q)
//===== Compatible With ======================================
//= Every eAthena Version
//===== Description ==========================================
//= This Script allows Player's editing their Account in-Game
// like an Control Panel.
//= For GM's over Level 40:
//- View Server Statistic
//- View your own Account - Same as Player
//- View other Char's Account Details by typing
// the name of an character bounded to it; such us E-Mail, IP,
// for GM's with Level 80 and higher Username and Account ID as well
//===== Comments =============================================
//= .@max_ch: Max Characters per Account, please
// put the number you have or the Slot Change Part
// won't work like it should.
// For Renewal Servers : src/common/mmo.h > #define MAX_CHARS
// Don't know for older servers anymore though.
//============================================================
help_lobby,59,140,6 script In-Game CP 110,{
set .@max_ch,21; // Max Characters per Account
set .@n$,"^55AA88[Control Panel]^000000";
mes .@n$;
mes "Hello, " + strcharinfo(0);
mes "I can tell you your Account";
mes "Settings, as well I can";
mes "change them for you.";
mes "What do you like to do?";
next;
if(getgmlevel() >= 40) goto GM_Menu;
menu "- Show my Info",CP_My,"- Nothing",CP_Quit;
close;
//================== GM_Menu ==================
GM_Menu:
if(select("- View Players Account's:- View my Account:- View Server Statistic") == 1) {
//===================== View other Player's Account =====================
mes .@n$;
mes "Please type the character";
mes "name you want and I'll find the";
mes "Account bounded to it.";
input @s_char$;
next;
mes .@n$;
if(@s_char$ == "") { mes "Character Name is invalid."; close;}
query_sql "SELECT `account_id` FROM `char` WHERE `name` = '"+@s_char$+"'",@s_accid;
if(!@s_accid) { mes "Character Name is invalid."; close;}
query_sql "SELECT `userid` , `sex` , `email` , `logincount` , `last_ip` FROM `login` WHERE `account_id` = '"+@s_accid+"'",@user$,@sex$,@email$,@login,@last_ip$;
if(getgmlevel() >= 80) {
mes "Username: " + @user$;
mes "Account ID: " + @s_accid;
}
mes "Gender: " + @sex$;
mes "E-Mail: " + @email$;
mes "Login Count: " + @login;
mes "Last IP: " + @last_ip$;
mes " ";
mes "Duo user protection";
mes ((getgmlevel() >= 80) ? "the Password" : "the Username, Account ID and Password");
mes "won't be shown.";
close;
//================= View my Account =============
} else if(@menu == 2) {
CP_My:
query_sql "SELECT `userid` , `sex` , `email` , `logincount` , `last_ip` FROM `login` WHERE `account_id` = '"+getcharid(3)+"'",@user$,@sex$,@email$,@login,@last_ip$;
mes .@n$;
mes "Username: " + @user$;
mes "Account ID: " + getcharid(3);
mes "Gender: " + @sex$;
mes "E-Mail: " + @email$;
mes "Login Count: " + @login;
mes "Your IP: " + @last_ip$;
mes " ";
mes "Duo user protection";
mes "the password won't be shown.";
mes "What now?";
next;
switch(select("- View Char's:- Edit E-Mail:- Edit Gender:- Nothing")) {
//============== View Char's ============
case 1:
mes .@n$;
mes "Choose a character, if you";
mes "want to change something.";
query_sql "SELECT `char_num` , `name` , `class` , `base_level` , `job_level` , `zeny` , `str` , `agi` , `vit` , `int` , `dex` , `luk` , `last_map` , `last_x` , `last_y` , `save_map` , `save_x` , `save_y` FROM `char` WHERE `account_id` = '"+getcharid(3)+"' ORDER BY `base_level` DESC",@char_num,@name$,@class,@base_level,@job_level,@zeny,@str,@agi,@int,@vit,@dex,@luk,@last_map$,@last_x,@last_y,@save_map$,@save_x,@save_y;
set @menu$,"";
mes " ";
set @menu$,"- " + @name$[0] + "";
mes "^FF0000~ "+@name$[0]+" ~^000000";
mes "---------------------";
mes "[Base/Job: " + @base_level[0] + "/" + @job_level[0] + "]";
mes "(Class: " + jobname(@class[0]) + ")";
mes "=====================";
for( set @a,1; @a < getarraysize(@name$); set @a,@a + 1) {
mes "^FF0000~ "+@name$[@a]+" ~^000000";
mes "---------------------";
mes "[Base/Job: " + @base_level[@a] + "/" + @job_level[@a] + "]";
mes "(Class: " + jobname(@class[@a]) + ")";
mes "=====================";
set @menu$,@menu$ + ":- " + @name$[@a] + "";
}
next;
if((prompt(@menu$) - getarraysize(@name$)) > 0) {
close;
} else {
set @m,@menu - 1;
mes .@n$;
mes "You have chosen:";
mes "^FF0000~ "+@name$[@m]+" ~^000000";
mes "Base/Job: " + @base_level[@m] + "/" + @job_level[@m];
mes "Class: " + jobname(@class[@m]);
mes "Zeny: " + @zeny[@m];
mes " ";
mes "Strenght: " + @str[@m];
mes "Agility: " + @agi[@m];
mes "Vitality: " + @vit[@m];
mes "Intelligence: " + @int[@m];
mes "Dexterity: " + @dex[@m];
mes "Luck: " + @luk[@m];
mes " ";
mes "Position:";
mes "Current Map: " + @last_map$[@m];
mes "Cooardinates x: " + @last_x[@m] + ", y: " + @last_y[@m];
mes " ";
mes "Savepoint:";
mes "Map: "+ @save_map$[@m] + " x: " + @save_x[@m] + ", y: " + @save_y[@m];
mes "What do you want to do?";
next;
switch(select("- Reset Position:- Reset Style:- Change Slot:- Reset Equip:- Nothing")) {
//=============================== Reset Position ============================
case 1:
mes .@n$;
query_sql "SELECT `online` FROM `char` WHERE `name` = '"+escape_sql(@name$[@m])+"'",@online;
if(@online) {
mes "I'm sorry, but I can't reset the";
mes "position of the chosen character";
mes "while you are logged-in on it.";
close;
}
mes "I will reset the position now.";
query_sql "UPDATE `char` SET `last_map` = '"+@save_map$[@m]+"' , `last_x` = '"+@save_x[@m]+"' , `last_y` = '"+@save_y[@m]+"' WHERE `name` = '"+escape_sql(@name$[@m])+"'";
close;
//=============================== Reset Style ============================
case 2:
mes .@n$;
mes "This will reset your";
mes "whole style.";
next;
if(select("- Proceed:- Stop!!") - 1) {
mes .@n$;
mes "As you wish.";
mes "Your request has been canceled.";
close;
} else {
mes .@n$;
query_sql "SELECT `online` FROM `char` WHERE `name` = '"+escape_sql(@name$[@m])+"'",@online;
if(@online) {
mes "I'm sorry, but I can't reset the";
mes "style of the chosen character";
mes "while you are logged-in on it.";
close;
}
query_sql "UPDATE `char` SET `hair` , `hair_color` , `clothes_color` = '0' , '0' , '0' WHERE `name` = '"+escape_sql(@name$[@m])+"'";
mes "Your request has been completed.";
close;
}
//=============================== Change Character Slot ============================
case 3:
set @menu_c$,"";
mes .@n$;
mes "The slots, which are used:";
mes " ";
for( set @num,0; @num < getarraysize(@char_num); set @num,@num + 1) {
mes @char_num[@num] + ". " + @name$[@num];
}
mes " ";
mes "Into which Slot do you want to change?";
next;
input @num_ch;
mes .@n$;
if(@num_ch > .@max_ch) {
mes "I'm sorry, but you";
mes "have put an invalid";
mes "number. Try again please.";
close;
}
mes "You have chosen:";
mes @num_ch + ".";
mes " ";
mes "I will change the slot now.";
mes "Is that correct?";
if(select("- Yes, continue:- No, wrong") - 1) {
close;
} else {
next;
mes .@n$;
query_sql "SELECT `online` FROM `char` WHERE `name` = '"+escape_sql(@name$[@m])+"'",@online;
if(@online) {
mes "I'm sorry, but I can't change the";
mes "Slot of the chosen character";
mes "while you are logged-in on it.";
close;
}
for(set @n_ct,0; @n_ct < getarraysize(@char_num); set @n_ct,@n_ct + 1) {
if(@char_num[@n_ct] == @num_ch) {
mes "I'm sorry, but this";
mes "Slot is in use already.";
mes "Try again please.";
close;
}
}
query_sql "UPDATE `char` SET `char_num` = '"+@num_ch+"' WHERE `name` = '"+escape_sql(@name$[@m])+"'";
mes "Your request has been completed.";
close;
}
//================================ Reset Equip ===============================
case 4:
mes .@n$;
mes "Wanna reset your Equip?";
if(select("- Yes, please:- No, thanks") - 1) {
close;
} else {
next;
mes .@n$;
query_sql "SELECT `online` FROM `char` WHERE `name` = '"+@name$[@m]+"'",@online;
if(@online) {
mes "I'm sorry, but I can't reset";
mes "your equipment of this character";
mes "while you are logged-in on it.";
close;
}
mes "I will start now.";
query_sql "UPDATE `inventory` SET `equip` = '0' WHERE `char_id` = '"+getcharid(0,escape_sql(@name$[@m]))+"'";
query_sql "UPDATE `char` SET `weapon` = '0' , `shield` = '0' , `head_top` = '0' , `head_mid` = '0' , `head_bottom` = '0' WHERE `name` = '"+escape_sql(@name$[@m])+"'";
next;
mes .@n$;
mes "Your request has been completed.";
close;
}
//===================== Nothing =====================
case 5:
goto CP_Quit;
break;
} // Edit Char - End
} // Choose Char - End
//============== Edit Mail ============
case 2:
mes .@n$;
mes "Now input the new E-Mail";
mes "Address:";
mes "Note: Type 'Cancel' for";
mes "aborting your attempt.";
next;
input @mail_n$;
if(@mail_n$ == "Cancel") goto CP_Quit;
mes .@n$;
mes "Old E-Mail:" +@email$;
mes "New E-Mail:" +@mail_n$;
mes " ";
mes "Is that correct?";
next;
if(select("- Yes, proceed please:- No, cancel it") - 1) {
mes .@n$;
mes "As you wish.";
mes "Your request has been canceled.";
close;
} else {
mes .@n$;
mes "You're E-Mail will be changed now.";
next;
query_sql "UPDATE `login` SET `email` = '"+escape_sql(@mail_n$)+"' WHERE `account_id` = '"+getcharid(3)+"'";
mes .@n$;
mes "Your request has been completed.";
close;
}
//============== Edit Gender - 1 Month delay ============
case 3:
mes .@n$;
if(gettimetick(2) < #sexch) {
mes "You can't change your";
mes "gender again. The time left:";
mes #sexch - gettimetick(2) + " Seconds.";
close;
}
mes "Note: Delay between changing your";
mes "gender again is one month.";
mes "Wanna still change it?";
next;
if(select("- Yes, proceed please:- No, cancel it") - 1) {
mes .@n$;
mes "As you wish.";
mes "Your request has been canceled.";
close;
} else {
mes .@n$;
mes "You're gender will be changed now,";
mes "you'll be kicked afterwards.";
next;
mes .@n$;
mes "Your request has been completed.";
close2;
set #sexch,gettimetick(2) + 2592000;
changesex;
end;
}
//===================== Nothing =====================
case 4:
goto CP_Quit;
break;
}
} else if(@menu == 3) {
//=============== Server Statistic ===================
query_sql "SELECT count(*) FROM `login` WHERE `account_id` > 1",.@count_acc;
query_sql "SELECT count(*) FROM `char`",.@count_char;
query_sql "SELECT `zeny` FROM `char` WHERE `zeny` > 0",.@count_zeny;
for( set .@z,0; .@z < getarraysize(.@count_zeny); set .@z,.@z + 1)
set .@total_zeny,.@total_zeny + .@count_zeny[.@z];
next;
mes .@n$;
mes "Total Accounts: " + .@count_acc;
mes "Total Characters: " + .@count_char;
mes "Total Zeny: " + .@total_zeny;
next;
menu "Show Online Players",-,"Nothing",CP_Quit;
mes .@n$;
mes "I will now show the list of the";
mes "Online Players in your Chat Box.";
close2;
dispbottom "======~-[)* Online <Ü> Players *(]~-========";
query_sql "SELECT `name` , `class` , `base_level` , `job_level` FROM `char` WHERE `online` = '1'",.@name$,.@class,.@b_level,.@j_level;
for( set .@a,0; .@a < getarraysize(.@name$); set .@a,.@a + 1)
dispbottom .@name$[.@a] + " [Base/Job: " + .@b_level[.@a] + "/" + .@j_level[.@a] + "] (Class: " + jobname(.@class[.@a]) + ")";
end;
}
//=================== Quit Message ==================
CP_Quit:
mes .@n$;
mes "Farewell, " + strcharinfo(0);
close;
}