diff options
Diffstat (limited to 'src/map/duel.c')
-rw-r--r-- | src/map/duel.c | 60 |
1 files changed, 36 insertions, 24 deletions
diff --git a/src/map/duel.c b/src/map/duel.c index 2dae0ae0e..e18e2fc45 100644 --- a/src/map/duel.c +++ b/src/map/duel.c @@ -6,17 +6,19 @@ #include "duel.h" +#include "map/atcommand.h" // msg_txt +#include "map/clif.h" +#include "map/pc.h" +#include "common/cbasetypes.h" +#include "common/nullpo.h" + #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> -#include "atcommand.h" // msg_txt -#include "clif.h" -#include "pc.h" -#include "../common/cbasetypes.h" - struct duel_interface duel_s; +struct duel_interface *duel; /*========================================== * Duel organizing functions [LuzZza] @@ -24,10 +26,10 @@ struct duel_interface duel_s; void duel_savetime(struct map_session_data* sd) { time_t clock; struct tm *t; - + time(&clock); t = localtime(&clock); - + pc_setglobalreg(sd, script->add_str("PC_LAST_DUEL_TIME"), t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min); } @@ -35,22 +37,25 @@ int duel_checktime(struct map_session_data* sd) { int diff; time_t clock; struct tm *t; - + time(&clock); t = localtime(&clock); - + diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, script->add_str("PC_LAST_DUEL_TIME") ); - + return !(diff >= 0 && diff < battle_config.duel_time_interval); } + static int duel_showinfo_sub(struct map_session_data* sd, va_list va) { struct map_session_data *ssd = va_arg(va, struct map_session_data*); int *p = va_arg(va, int*); char output[256]; + nullpo_retr(1, sd); + nullpo_retr(1, ssd); if (sd->duel_group != ssd->duel_group) return 0; - + sprintf(output, " %d. %s", ++(*p), sd->status.name); clif_disp_onlyself(ssd, output, strlen(output)); return 1; @@ -79,19 +84,21 @@ void duel_showinfo(const unsigned int did, struct map_session_data* sd) { int duel_create(struct map_session_data* sd, const unsigned int maxpl) { int i=1; char output[256]; - + + nullpo_ret(sd); + while(i < MAX_DUEL && duel->list[i].members_count > 0) i++; if(i == MAX_DUEL) return 0; - + duel->count++; sd->duel_group = i; duel->list[i].members_count++; duel->list[i].invites_count = 0; duel->list[i].max_players_limit = maxpl; - + safestrncpy(output, msg_sd(sd,372), sizeof(output)); // " -- Duel has been created (@invite/@leave) --" clif_disp_onlyself(sd, output, strlen(output)); - + clif->map_property(sd, MAPPROPERTY_FREEPVPZONE); clif->maptypeproperty2(&sd->bl,SELF); return i; @@ -100,13 +107,15 @@ int duel_create(struct map_session_data* sd, const unsigned int maxpl) { void duel_invite(const unsigned int did, struct map_session_data* sd, struct map_session_data* target_sd) { char output[256]; + nullpo_retv(sd); + nullpo_retv(target_sd); // " -- Player %s invites %s to duel --" sprintf(output, msg_sd(sd,373), sd->status.name, target_sd->status.name); clif->disp_message(&sd->bl, output, strlen(output), DUEL_WOS); target_sd->duel_invite = did; duel->list[did].invites_count++; - + // "Blue -- Player %s invites you to PVP duel (@accept/@reject) --" sprintf(output, msg_sd(target_sd,374), sd->status.name); clif->broadcast((struct block_list *)target_sd, output, strlen(output)+1, BC_BLUE, SELF); @@ -115,6 +124,7 @@ void duel_invite(const unsigned int did, struct map_session_data* sd, struct map static int duel_leave_sub(struct map_session_data* sd, va_list va) { int did = va_arg(va, int); + nullpo_ret(sd); if (sd->duel_invite == did) sd->duel_invite = 0; return 0; @@ -122,18 +132,18 @@ static int duel_leave_sub(struct map_session_data* sd, va_list va) void duel_leave(const unsigned int did, struct map_session_data* sd) { char output[256]; - + + nullpo_retv(sd); // " <- Player %s has left duel --" sprintf(output, msg_sd(sd,375), sd->status.name); clif->disp_message(&sd->bl, output, strlen(output), DUEL_WOS); - + duel->list[did].members_count--; - if(duel->list[did].members_count == 0) { map->foreachpc(duel_leave_sub, did); duel->count--; } - + sd->duel_group = 0; duel_savetime(sd); clif->map_property(sd, MAPPROPERTY_NOTHING); @@ -142,12 +152,13 @@ void duel_leave(const unsigned int did, struct map_session_data* sd) { void duel_accept(const unsigned int did, struct map_session_data* sd) { char output[256]; - + + nullpo_retv(sd); duel->list[did].members_count++; sd->duel_group = sd->duel_invite; duel->list[did].invites_count--; sd->duel_invite = 0; - + // " -> Player %s has accepted duel --" sprintf(output, msg_sd(sd,376), sd->status.name); clif->disp_message(&sd->bl, output, strlen(output), DUEL_WOS); @@ -158,11 +169,12 @@ void duel_accept(const unsigned int did, struct map_session_data* sd) { void duel_reject(const unsigned int did, struct map_session_data* sd) { char output[256]; - + + nullpo_retv(sd); // " -- Player %s has rejected duel --" sprintf(output, msg_sd(sd,377), sd->status.name); clif->disp_message(&sd->bl, output, strlen(output), DUEL_WOS); - + duel->list[did].invites_count--; sd->duel_invite = 0; } |