// TMW2 Script // // @titulate // Grants a title to . Cannot be undone. // @cassate // Opens a prompt to strip someone from their titles. // Can also ban from titles. Grandmasters only. - script @titulate 32767,{ end; OnCall: .@request$ = ""; .@request$ += implode(.@atcmd_parameters$, " "); .@request$ = strip(.@request$); // 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 || .@them < 0) { mesc l("You can only concede or vouch a title for people of academic rank inferior than 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 vouched 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); } attachrid(.@ori); // Inform everyone kamibroadcast(sprintf("%s has vouched %s for the title of %s.", strcharinfo(0), .@request$, academicrank(.@them+1))); // Log in a special log file as well logmes(sprintf("%s has vouched %s for the title of %s.", strcharinfo(0), .@request$, academicrank(.@them+1))); close; OnCassate: if (ACADEMIC_RANK < ACADEMIC_GM) { mesc l("Only Academy Grand Masters may cassate someone."); close; } mes ("To revoke someone's title and optionally apply a ban on them."); mes ("Please insert the nickname of person to cassate (they must be online)"); input .@request$; if (.@request$ == "") close; mes ("Ban them from the Magic Academy as well?"); .@ban=(askyesno() == ASK_YES); next; .@ori = getcharid(3); .@id = getcharid(3, .@request$); if (.@id < 1 || .@ori < 1) { Exception("Player not found.", RB_ISFATAL|RB_DISPBOTTOM); } // Execute the banishment if (attachrid(.@id)) { ACADEMIC_RANK=(.@ban ? -1 : ACADEMIC_LAYMAN); skill TMW2_STUDY, 0, 0; dispbottom l("Your academy titles have been rescinded%s", (.@ban ? l(", and you have been banned from the Academy.") : ".")); } else { Exception("Player not found.", RB_ISFATAL|RB_DISPBOTTOM); } attachrid(.@ori); // Inform everyone kamibroadcast(sprintf("%s (A.GM) has stripped %s from their academic titles.", strcharinfo(0), .@request$)); // Log in a special log file as well logmes(sprintf("%s (Grandmaster) has stripped %s from their academic titles.", strcharinfo(0), .@request$)); close; OnInit: bindatcmd "titulate", "@titulate::OnCall", 0, 100, 1; bindatcmd "cassate", "@titulate::OnCassate", 60, 100, 1; } function script AutoTitulate { .@ori = gettimetick(2); // Will never duplicate 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: getexp 5000000, 150000; mesc "+500,000 exp"; mesc "+150,000 job"; 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|RB_PLEASEREPORT); } // Message if (.@upgrade) { dispbottom l("You received the %s title from %s.", academicrank(), "Hocus Pocus the Fidibus"); } else { dispbottom l("You were vouched to the %s title by %s. You still need %d more vouches to be promoted.", academicrank(ACADEMIC_RANK+1), "Hocus Pocus the Fidibus", (ACADEMIC_RANK >= ACADEMIC_DOCTOR ? 3 : 2) - array_entries(ACADEMIC_VOUCH)); } // Inform everyone .@r = ACADEMIC_RANK + 1; kamibroadcast(sprintf("%s has vouched %s for the title of %s.", "Hocus Pocus the Fidibus", strcharinfo(0), academicrank(.@r))); // Log in a special log file as well logmes(sprintf("%s has vouched %s for the title of %s.", "Hocus Pocus the Fidibus", strcharinfo(0), academicrank(.@r))); // Continue return; }