// TMW2 Script
//
// @grantpower <username>
// Grants a legendary weapon to <username>. Cannot be undone.
// Only way to bypass restrictions on legendary weapons.
- script @titulate 32767,{
end;
OnCall:
.@request$ = "";
.@request$ += implode(.@atcmd_parameters$, " ");
// No argument supplied
if (.@request$ == "") {
Exception("Usage: @titulate <target charname>", RB_ISFATAL|RB_DISPBOTTOM);
}
// Player is not attached
.@ori = getcharid(3);
.@id = getcharid(3, .@request$);
if (.@id < 1 || .@ori < 1) {
Exception("Player not found.", RB_ISFATAL|RB_DISPBOTTOM);
}
// Obtain your own title
.@mine=ACADEMIC_RANK;
.@them=getvariableofpc(ACADEMIC_RANK, .@id, 99);
mes ".:: " + l("Titulation") + " ::.";
if (.@mine <= .@them) {
mesc l("You can only concede or vouch a title for people of academic rank smaller or equal to your own.");
close;
}
mesc l("You're about to concede an academic title to \"@@\".", .@request$), 1;
mesc l("If this is found out to be a fraudulent titulation, both you as target will have their titles cased by the Academic Council, or by the Alliance High Council."), 1;
mesc l("This action CANNOT BE UNDONE."), 1;
mes l("Are you sure?");
if (askyesno() == ASK_NO)
close;
// Grant the title
if (attachrid(.@id)) {
switch (ACADEMIC_RANK) {
case ACADEMIC_LAYMAN:
case ACADEMIC_STUDENT:
case ACADEMIC_TECHNIC:
// Instant promotion
ACADEMIC_RANK+=1;
.@upgrade=true;
break;
case ACADEMIC_BACHELOR:
case ACADEMIC_MASTER:
// Two-Man rule
if (array_find(ACADEMIC_VOUCH, .@ori)) {
end;
}
array_push(ACADEMIC_VOUCH, .@ori);
if (array_entries(ACADEMIC_VOUCH) >= 2) {
ACADEMIC_RANK+=1;
deletearray(ACADEMIC_VOUCH);
.@upgrade=true;
}
break;
case ACADEMIC_DOCTOR:
case ACADEMIC_PHD:
// Three-Man rule
if (array_find(ACADEMIC_VOUCH, .@ori)) {
end;
}
array_push(ACADEMIC_VOUCH, .@ori);
if (array_entries(ACADEMIC_VOUCH) >= 3) {
ACADEMIC_RANK+=1;
deletearray(ACADEMIC_VOUCH);
.@upgrade=true;
}
break;
// Invalid
case ACADEMIC_SAGE:
Exception("The Grand Master title can only be issued by the president of the Alliance High Council.", RB_ISFATAL|RB_SPEECH);
default:
Exception("Invalid titulation rank: "+ACADEMIC_RANK, RB_ISFATAL|RB_SPEECH);
}
// Message
if (.@upgrade) {
dispbottom l("You received the %s title from %s.",
academicrank(), strcharinfo(0, "someone", .@ori));
} else {
dispbottom l("You were vouced to the %s title by %s. You still need %d more vouches to be promoted.",
academicrank(ACADEMIC_RANK+1), strcharinfo(0, "someone", .@ori),
(ACADEMIC_RANK >= ACADEMIC_DOCTOR ? 3 : 2) - array_entries(ACADEMIC_VOUCH));
}
// Oops, player disconnected
} else {
Exception("Player not found.", RB_ISFATAL|RB_SPEECH);
}
// Inform everyone
kamibroadcast(sprintf("%s has vouched %s for the title of %s.",
strcharinfo(0), .@request$, academicrank(.@them+1)));
close;
OnInit:
bindatcmd "titulate", "@titulate::OnCall", 0, 100, 1;
}