summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/groups.conf1
-rw-r--r--src/map/atcommand.c60
-rw-r--r--src/map/guild.c2
-rw-r--r--src/map/script.c3
4 files changed, 63 insertions, 3 deletions
diff --git a/conf/groups.conf b/conf/groups.conf
index 7c4a1dbe5..dabebe7a2 100644
--- a/conf/groups.conf
+++ b/conf/groups.conf
@@ -129,6 +129,7 @@ groups: (
autotrade: true
request: true
go: true
+ breakguild: true
}
permissions: {
}
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 09960c203..a48fe17bc 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -3308,6 +3308,37 @@ ACMD_FUNC(guild)
return 0;
}
+ACMD_FUNC(breakguild)
+{
+ int ret = 0;
+ struct guild *g;
+ nullpo_retr(-1, sd);
+
+ if (sd->status.guild_id) { // Check if the player has a guild
+ g = guild_search(sd->status.guild_id); // Search the guild
+ if (g) { // Check if guild was found
+ if (sd->state.gmaster_flag) { // Check if player is guild master
+ ret = guild_break(sd, g->name); // Break guild
+ if (ret) { // Check if anything went wrong
+ return 0; // Guild was broken
+ } else {
+ return -1; // Something went wrong
+ }
+ } else { // Not guild master
+ clif_displaymessage(fd, msg_txt(1181)); // You need to be a Guild Master to use this command.
+ return -1;
+ }
+ } else { // Guild was not found. HOW?
+ clif_displaymessage(fd, msg_txt(252)); // You are not in a guild.
+ return -1;
+ }
+ } else { // Player does not have a guild
+ clif_displaymessage(fd, msg_txt(252)); // You are not in a guild.
+ return -1;
+ }
+ return 0;
+}
+
/*==========================================
*
*------------------------------------------*/
@@ -6879,6 +6910,33 @@ ACMD_FUNC(homevolution)
return 0;
}
+ACMD_FUNC(hommutate)
+{
+ int homun_id, m_class = 0, m_id;
+ nullpo_retr(-1, sd);
+
+ if (!merc_is_hom_active(sd->hd)) {
+ clif_displaymessage(fd, msg_txt(1254)); // You do not have a homunculus.
+ return -1;
+ }
+
+ if (!message || !*message) {
+ homun_id = 6048 + (rnd() % 4);
+ } else {
+ homun_id = atoi(message);
+ }
+
+ m_class = hom_class2mapid(sd->hd->homunculus.class_);
+ m_id = hom_class2mapid(homun_id);
+
+ if (m_class != -1 && m_id != -1 && m_class&HOM_EVO && m_id&HOM_S && sd->hd->homunculus.level >= 99) {
+ hom_mutate(sd->hd, homun_id);
+ } else {
+ clif_emotion(&sd->hd->bl, E_SWT);
+ }
+ return 0;
+}
+
/*==========================================
* call choosen homunculus [orn]
*------------------------------------------*/
@@ -8844,6 +8902,7 @@ void atcommand_basecommands(void) {
ACMD_DEF(spiritball),
ACMD_DEF(party),
ACMD_DEF(guild),
+ ACMD_DEF(breakguild),
ACMD_DEF(agitstart),
ACMD_DEF(agitend),
ACMD_DEF(mapexit),
@@ -8974,6 +9033,7 @@ void atcommand_basecommands(void) {
ACMD_DEF(request),
ACMD_DEF(homlevel),
ACMD_DEF(homevolution),
+ ACMD_DEF(hommutate),
ACMD_DEF(makehomun),
ACMD_DEF(homfriendly),
ACMD_DEF(homhungry),
diff --git a/src/map/guild.c b/src/map/guild.c
index 9eeae7cf1..f1d81b081 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -1798,7 +1798,7 @@ int guild_break(struct map_session_data *sd,char *name)
}
intif_guild_break(g->guild_id);
- return 0;
+ return 1;
}
/**
diff --git a/src/map/script.c b/src/map/script.c
index 8f016a6f8..a949f8e96 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -10117,7 +10117,6 @@ BUILDIN_FUNC(homunculus_evolution)
BUILDIN_FUNC(homunculus_mutate)
{
int homun_id, m_class, m_id;
- int homun_array[5] = {6048,6049,6050,6051,6052};
TBL_PC *sd;
sd = script_rid2sd(st);
@@ -10127,7 +10126,7 @@ BUILDIN_FUNC(homunculus_mutate)
if(script_hasdata(st,2))
homun_id = script_getnum(st,2);
else
- homun_id = homun_array[rnd() % 5];
+ homun_id = 6048 + (rnd() % 4);
if(merc_is_hom_active(sd->hd)) {
m_class = hom_class2mapid(sd->hd->homunculus.class_);