|
@@ -18,6 +18,7 @@
|
|
#include "chrif.h"
|
|
#include "chrif.h"
|
|
#include "clif.h"
|
|
#include "clif.h"
|
|
#include "date.h" // is_day_of_*()
|
|
#include "date.h" // is_day_of_*()
|
|
|
|
+#include "duel.h"
|
|
#include "intif.h"
|
|
#include "intif.h"
|
|
#include "itemdb.h"
|
|
#include "itemdb.h"
|
|
#include "log.h"
|
|
#include "log.h"
|
|
@@ -63,9 +64,6 @@ static unsigned short equip_pos[EQI_MAX]={EQP_ACC_L,EQP_ACC_R,EQP_SHOES,EQP_GARM
|
|
#define MOTD_LINE_SIZE 128
|
|
#define MOTD_LINE_SIZE 128
|
|
static char motd_text[MOTD_LINE_SIZE][CHAT_SIZE_MAX]; // Message of the day buffer [Valaris]
|
|
static char motd_text[MOTD_LINE_SIZE][CHAT_SIZE_MAX]; // Message of the day buffer [Valaris]
|
|
|
|
|
|
-struct duel duel_list[MAX_DUEL];
|
|
|
|
-int duel_count = 0;
|
|
|
|
-
|
|
|
|
//Links related info to the sd->hate_mob[]/sd->feel_map[] entries
|
|
//Links related info to the sd->hate_mob[]/sd->feel_map[] entries
|
|
const struct sg_data sg_info[MAX_PC_FEELHATE] = {
|
|
const struct sg_data sg_info[MAX_PC_FEELHATE] = {
|
|
{ SG_SUN_ANGER, SG_SUN_BLESS, SG_SUN_COMFORT, "PC_FEEL_SUN", "PC_HATE_MOB_SUN", is_day_of_sun },
|
|
{ SG_SUN_ANGER, SG_SUN_BLESS, SG_SUN_COMFORT, "PC_FEEL_SUN", "PC_HATE_MOB_SUN", is_day_of_sun },
|
|
@@ -7735,168 +7733,6 @@ void pc_setstand(struct map_session_data *sd){
|
|
sd->state.dead_sit = sd->vd.dead_sit = 0;
|
|
sd->state.dead_sit = sd->vd.dead_sit = 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/*==========================================
|
|
|
|
- * Duel organizing functions [LuzZza]
|
|
|
|
- *------------------------------------------*/
|
|
|
|
-void duel_savetime(struct map_session_data* sd)
|
|
|
|
-{
|
|
|
|
- time_t timer;
|
|
|
|
- struct tm *t;
|
|
|
|
-
|
|
|
|
- time(&timer);
|
|
|
|
- t = localtime(&timer);
|
|
|
|
-
|
|
|
|
- pc_setglobalreg(sd, "PC_LAST_DUEL_TIME", t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min);
|
|
|
|
- return;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_checktime(struct map_session_data* sd)
|
|
|
|
-{
|
|
|
|
- int diff;
|
|
|
|
- time_t timer;
|
|
|
|
- struct tm *t;
|
|
|
|
-
|
|
|
|
- time(&timer);
|
|
|
|
- t = localtime(&timer);
|
|
|
|
-
|
|
|
|
- diff = t->tm_mday*24*60 + t->tm_hour*60 + t->tm_min - pc_readglobalreg(sd, "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];
|
|
|
|
-
|
|
|
|
- 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;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_showinfo(const unsigned int did, struct map_session_data* sd)
|
|
|
|
-{
|
|
|
|
- int p=0;
|
|
|
|
- char output[256];
|
|
|
|
-
|
|
|
|
- if(duel_list[did].max_players_limit > 0)
|
|
|
|
- sprintf(output, msg_txt(370), //" -- Duels: %d/%d, Members: %d/%d, Max players: %d --"
|
|
|
|
- did, duel_count,
|
|
|
|
- duel_list[did].members_count,
|
|
|
|
- duel_list[did].members_count + duel_list[did].invites_count,
|
|
|
|
- duel_list[did].max_players_limit);
|
|
|
|
- else
|
|
|
|
- sprintf(output, msg_txt(371), //" -- Duels: %d/%d, Members: %d/%d --"
|
|
|
|
- did, duel_count,
|
|
|
|
- duel_list[did].members_count,
|
|
|
|
- duel_list[did].members_count + duel_list[did].invites_count);
|
|
|
|
-
|
|
|
|
- clif_disp_onlyself(sd, output, strlen(output));
|
|
|
|
- map_foreachpc(duel_showinfo_sub, sd, &p);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_create(struct map_session_data* sd, const unsigned int maxpl)
|
|
|
|
-{
|
|
|
|
- int i=1;
|
|
|
|
- char output[256];
|
|
|
|
-
|
|
|
|
- while(duel_list[i].members_count > 0 && i < MAX_DUEL) 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;
|
|
|
|
-
|
|
|
|
- strcpy(output, msg_txt(372)); // " -- Duel has been created (@invite/@leave) --"
|
|
|
|
- clif_disp_onlyself(sd, output, strlen(output));
|
|
|
|
-
|
|
|
|
- clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
|
|
|
|
- //clif_misceffect2(&sd->bl, 159);
|
|
|
|
- return i;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_invite(const unsigned int did, struct map_session_data* sd, struct map_session_data* target_sd)
|
|
|
|
-{
|
|
|
|
- char output[256];
|
|
|
|
-
|
|
|
|
- // " -- Player %s invites %s to duel --"
|
|
|
|
- sprintf(output, msg_txt(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_txt(374), sd->status.name);
|
|
|
|
- clif_broadcast((struct block_list *)target_sd, output, strlen(output)+1, 0x10, SELF);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int duel_leave_sub(struct map_session_data* sd, va_list va)
|
|
|
|
-{
|
|
|
|
- int did = va_arg(va, int);
|
|
|
|
- if (sd->duel_invite == did)
|
|
|
|
- sd->duel_invite = 0;
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_leave(const unsigned int did, struct map_session_data* sd)
|
|
|
|
-{
|
|
|
|
- char output[256];
|
|
|
|
-
|
|
|
|
- // " <- Player %s has left duel --"
|
|
|
|
- sprintf(output, msg_txt(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);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_accept(const unsigned int did, struct map_session_data* sd)
|
|
|
|
-{
|
|
|
|
- char output[256];
|
|
|
|
-
|
|
|
|
- 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_txt(376), sd->status.name);
|
|
|
|
- clif_disp_message(&sd->bl, output, strlen(output), DUEL_WOS);
|
|
|
|
-
|
|
|
|
- clif_map_property(sd, MAPPROPERTY_FREEPVPZONE);
|
|
|
|
- //clif_misceffect2(&sd->bl, 159);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-int duel_reject(const unsigned int did, struct map_session_data* sd)
|
|
|
|
-{
|
|
|
|
- char output[256];
|
|
|
|
-
|
|
|
|
- // " -- Player %s has rejected duel --"
|
|
|
|
- sprintf(output, msg_txt(377), sd->status.name);
|
|
|
|
- clif_disp_message(&sd->bl, output, strlen(output), DUEL_WOS);
|
|
|
|
-
|
|
|
|
- duel_list[did].invites_count--;
|
|
|
|
- sd->duel_invite = 0;
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
int pc_split_str(char *str,char **val,int num)
|
|
int pc_split_str(char *str,char **val,int num)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
@@ -8258,8 +8094,6 @@ int do_init_pc(void)
|
|
pc_readdb();
|
|
pc_readdb();
|
|
pc_read_motd(); // Read MOTD [Valaris]
|
|
pc_read_motd(); // Read MOTD [Valaris]
|
|
|
|
|
|
- memset(&duel_list[0], 0, sizeof(duel_list));
|
|
|
|
-
|
|
|
|
add_timer_func_list(pc_invincible_timer, "pc_invincible_timer");
|
|
add_timer_func_list(pc_invincible_timer, "pc_invincible_timer");
|
|
add_timer_func_list(pc_eventtimer, "pc_eventtimer");
|
|
add_timer_func_list(pc_eventtimer, "pc_eventtimer");
|
|
add_timer_func_list(pc_inventory_rental_end, "pc_inventory_rental_end");
|
|
add_timer_func_list(pc_inventory_rental_end, "pc_inventory_rental_end");
|