ff_u_chat_delete

Enables the player to delete the PC.

Enables /delete chat command with confirmation.

Variables

ENABLE__FF_U_CHAT_DELETE: (string) (opt-out) Set to “N” on module to disable unit.

Source code

// @code

#include "ff_i_core"


const string ENABLE__FF_U_CHAT_DELETE = "ENABLE__FF_U_CHAT_DELETE";

const string C1 = CHAT_COLOR_DEBUG;
const string C2 = CHAT_COLOR_SERVER;

// -----------------------------------------------------------------------------

void OnHelp();
void OnHelp()
{
  object oSpeaker = GetPCChatSpeaker();

  if (!GetIsPossessedFamiliar(oSpeaker))
    SendMessageToPC(oSpeaker, _RGB("/delete: ", C1) + _RGB("Delete character.", C2));
}


// -----------------------------------------------------------------------------

void OnChat();
void OnChat()
{
  object oModule = GetModule();
  object oSpeaker = GetPCChatSpeaker();
  string sMessage = GetPCChatMessage();

  if (GetIsPossessedFamiliar(oSpeaker))
    return;

  sMessage = GetStringTrim(GetStringLowerCase(sMessage));
  struct CLI_ARGUMENTS sArgs = GetArguments(sMessage);
  if (sArgs.sArg0 != "/delete")
    return;

  if (sArgs.nCount == 0)
  {
    string sPasswordChar = GetRandomString(ASCII_DIGITS, 4);
    SetLocalString(oSpeaker, "DELETE_PASSWORD", sPasswordChar);
    SendServerMessage(oSpeaker, "To confirm the deletion of your character, please type '/delete " + sPasswordChar + "'.", STRING_COLOR_CINNABAR);
  }
  else if (sArgs.nCount == 1)
  {
    string sPasswordIn = sArgs.sArg1;
    string sPasswordChar = GetLocalString(oSpeaker, "DELETE_PASSWORD");
    if ((sPasswordIn == sPasswordChar) && (sPasswordIn != ""))
    {
      string sMessage = "Player character has been deleted.";
      LogWarning(GetPCInfo(oSpeaker) + " decided to delete this character.");
      EradicatePC(oSpeaker, sMessage);
      return;
    }
  }

  SetPCChatMessage("");
}


// -----------------------------------------------------------------------------

void main()
{
  if (!GetModuleFlag(ENABLE__FF_U_CHAT_DELETE, TRUE))
    return;

  string sEvent = GetCurrentEvent();
  if (sEvent == ON_REGISTER)
  {
    SubscribeToEvent(ON_DEFAULT_PLAYER_CHAT, __FILE__);
    SubscribeToEvent(ON_DEFAULT_PLAYER_CHAT_HELP, __FILE__);
  }
  else if (sEvent == ON_DEFAULT_PLAYER_CHAT)
    OnChat();
  else if (sEvent == ON_DEFAULT_PLAYER_CHAT_HELP)
    OnHelp();


}