From a5534e046656f14a951ba3c5f86023389fd97986 Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Mon, 14 Dec 2020 15:28:58 -0300 Subject: Scholarship Titulation (manual mode) --- npc/commands/titulate.txt | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 npc/commands/titulate.txt (limited to 'npc/commands/titulate.txt') diff --git a/npc/commands/titulate.txt b/npc/commands/titulate.txt new file mode 100644 index 000000000..ee3031837 --- /dev/null +++ b/npc/commands/titulate.txt @@ -0,0 +1,110 @@ +// TMW2 Script +// +// @grantpower +// Grants a legendary weapon to . 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 ", 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; +} + -- cgit v1.2.3-70-g09d2