[GM] Irk değiştirme komutu

Kaptan Yosun

Moderatör
Moderatör
Geliştirici
Yardımsever Üye
Mesaj
924
Çözümler
31
Beğeni
855
Puan
939
Ticaret Puanı
0
Komutun yazarı metin2.dev'den
Linkleri görebilmek için giriş yap veya kayıt ol.
'dır.
Kodu refactor eden forum üyemiz martysama0134'tür
Komutu aldığım asıl konu:
Linkleri görebilmek için giriş yap veya kayıt ol.


Oyun içinde test yapma gibi çeşitli amaçlarla anlık ırk değiştirmek için kullanabileceğiniz bir komuttur.



cmd.cpp (ServerSource)
ara:
Genişlet Daralt Kopyala
ACMD(do_clear_affect);
altına ekle:
Genişlet Daralt Kopyala
ACMD(do_change_race); // Change race

ara:
Genişlet Daralt Kopyala
{ "do_clear_affect",        do_clear_affect,            0,                    POS_DEAD,        GM_LOW_WIZARD    },
altına ekle:
Genişlet Daralt Kopyala
{ "change_race",            do_change_race,                0,                    POS_DEAD,        GM_IMPLEMENTOR    }, // Change race

cmd_gm.cpp (ServerSource)
dosyanın en altına ekle:
Genişlet Daralt Kopyala
ACMD(do_change_race)
{
    char arg1[256], arg2[256];
    two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));
    // init
    bool bIsSetSkillGroup = false;
    DWORD dwRace = MAIN_RACE_MAX_NUM;
    DWORD dwSkillGroup = 0;
    // check arg1
    if (!*arg1)
    {
        goto USAGE;
        return;
    }
    // check&analyze arg2
    if (*arg2)
    {
        str_to_number(dwSkillGroup, arg2);
        dwSkillGroup = MINMAX(0, dwSkillGroup, 2);
        bIsSetSkillGroup = true;
    }
    // analyze arg1
    str_to_number(dwRace, arg1);
    if (dwRace >= MAIN_RACE_MAX_NUM)
    {
        goto USAGE;
        return;
    }
    // skip if same race
    if (dwRace == ch->GetRaceNum())
        return;
    // process change race
    ch->ChatPacket(CHAT_TYPE_INFO, "Old Race=%u, Group=%u", ch->GetRaceNum(), ch->GetSkillGroup());
    ch->SetRace(dwRace);
    ch->ClearSkill();
    // ch->ClearSubSkill();
    if (bIsSetSkillGroup)
    {
        ch->SetSkillGroup(dwSkillGroup);
    }
    // quick mesh change workaround begin
    ch->SetPolymorph(101);
    ch->SetPolymorph(0);
    // quick mesh change workaround end
    ch->ChatPacket(CHAT_TYPE_INFO, "New Race=%u, Group=%u", ch->GetRaceNum(), ch->GetSkillGroup());
    return;
    // usage
USAGE:
    ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /change_race <race_id> <&skill_group>");
    // race list
    ch->ChatPacket(CHAT_TYPE_INFO, "RACE-LIST");
    ch->ChatPacket(CHAT_TYPE_INFO, "\tWarrior M = %d", MAIN_RACE_WARRIOR_M);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tNinja F = %d", MAIN_RACE_ASSASSIN_W);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tSura M = %d", MAIN_RACE_SURA_M);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tShaman F = %d", MAIN_RACE_SHAMAN_W);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tWarrior W = %d", MAIN_RACE_WARRIOR_W);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tAssassin M = %d", MAIN_RACE_ASSASSIN_M);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tSura W = %d", MAIN_RACE_SURA_W);
    ch->ChatPacket(CHAT_TYPE_INFO, "\tShaman M = %d", MAIN_RACE_SHAMAN_M);
#ifdef ENABLE_WOLFMAN_CHARACTER
    ch->ChatPacket(CHAT_TYPE_INFO, "\tWolfman M = %d", MAIN_RACE_WOLFMAN_M);
#endif
    ch->ChatPacket(CHAT_TYPE_INFO, "\tRACE_MAX_NUM = %d", MAIN_RACE_MAX_NUM);
    // group list
    ch->ChatPacket(CHAT_TYPE_INFO, "GROUP-LIST");
    ch->ChatPacket(CHAT_TYPE_INFO, "\tNone = 0");
    ch->ChatPacket(CHAT_TYPE_INFO, "\tFirst = 1");
    ch->ChatPacket(CHAT_TYPE_INFO, "\tSecond = 2");
    return;
}
 
Son düzenleme:
Üst