Jump to content
  • 0
rafaelpsyco

Source Mod to rAthena to Hercules

Question

11 answers to this question

Recommended Posts

  • 0

[cbox]Index: conf/battle/battle.conf
===================================================================
--- conf/battle/battle.conf (revision 17156)
+++ conf/battle/battle.conf (working copy)
@@ -141,3 +141,10 @@
// range. For example, Sonic Blow requires a 2 cell distance before autocasting is allowed.
// This setting also affects autospellwhenhit.
autospell_check_range: no
+
+// [Cydh]
+// If you want to player can't warp, go, recalled, relog on battle for a while
+// You can use this to give them delay
+// Battle means while player attacking, using skills, receiving damage
+// Delay in milisecond
+prevent_warponbattle: 5000
Index: conf/msg_conf/map_msg.conf
===================================================================
--- conf/msg_conf/map_msg.conf (revision 17156)
+++ conf/msg_conf/map_msg.conf (working copy)
@@ -1409,5 +1409,8 @@
// @skillid (extension)
1398: -- Displaying first %d partial matches:

+// warpgo delay
+1399: You must wait %.1f sec. before %s.
+
//Custom translations
import: conf/import/msg_conf.txt
Index: src/map/atcommand.c
===================================================================
--- src/map/atcommand.c (revision 17156)
+++ src/map/atcommand.c (working copy)
@@ -379,6 +379,7 @@
unsigned short mapindex;
short x = 0, y = 0;
int16 m = -1;
+ int diff_tick, tick = gettick(); //warp on battle

nullpo_retr(-1, sd);

@@ -392,6 +393,14 @@
return -1;
}

+ //warp on battle
+ if((diff_tick = DIFF_TICK(sd->canwarp_tick,tick)) > 0 && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE))
+ {
+ sprintf(atcmd_output, msg_txt(1555), diff_tick/1000., command);
+ clif_displaymessage(fd, atcmd_output);
+ return -1;
+ }
+
mapindex = mapindex_name2id(map_name);
if (mapindex)
m = map_mapindex2mapid(mapindex);
@@ -1676,6 +1685,7 @@
int town;
char map_name[MAP_NAME_LENGTH];
int16 m;
+ int diff_tick, tick = gettick(); //warp on battle

const struct {
char map[MAP_NAME_LENGTH];
@@ -1730,6 +1740,14 @@
return 0;
}

+ //warp on battle
+ if((diff_tick = DIFF_TICK(sd->canwarp_tick,tick)) > 0 && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE))
+ {
+ sprintf(atcmd_output, msg_txt(1555), diff_tick/1000., command);
+ clif_displaymessage(fd, atcmd_output);
+ return -1;
+ }
+
memset(map_name, '0', sizeof(map_name));
memset(atcmd_output, '0', sizeof(atcmd_output));

@@ -2669,6 +2687,7 @@
*
*------------------------------------------*/
ACMD_FUNC(recall) {
+ int diff_tick, tick = gettick(); //warp on battle
struct map_session_data *pl_sd = NULL;

nullpo_retr(-1, sd);
@@ -2684,6 +2703,14 @@
return -1;
}

+ //warp on battle
+ if((diff_tick = DIFF_TICK(sd->canwarp_tick,tick)) > 0 && !pc_has_permission(pl_sd, PC_PERM_WARP_ANYWHERE))
+ {
+ sprintf(atcmd_output, msg_txt(1555), diff_tick/1000., "recall this player");
+ clif_displaymessage(fd, atcmd_output);
+ return -1;
+ }
+
if ( pc_get_group_level(sd) < pc_get_group_level(pl_sd) )
{
clif_displaymessage(fd, msg_txt(81)); // Your GM level doesn't authorize you to preform this action on the specified player.
Index: src/map/battle.c
===================================================================
--- src/map/battle.c (revision 17156)
+++ src/map/battle.c (working copy)
@@ -5898,6 +5898,7 @@
{ "skill_trap_type", &battle_config.skill_trap_type, 0, 0, 1, },
{ "item_restricted_consumption_type", &battle_config.item_restricted_consumption_type,1, 0, 1, },
{ "max_walk_path", &battle_config.max_walk_path, 17, 1, MAX_WALKPATH, },
+ { "prevent_warponbattle", &battle_config.prevent_warponbattle, 10000, 0, INT_MAX, }, //warp on battle
};
#ifndef STATS_OPT_OUT
/**
Index: src/map/battle.h
===================================================================
--- src/map/battle.h (revision 17156)
+++ src/map/battle.h (working copy)
@@ -486,6 +486,8 @@
int skill_trap_type;
int item_restricted_consumption_type;
int max_walk_path;
+
+ int prevent_warponbattle; //warp on battle
} battle_config;

void do_init_battle(void);
Index: src/map/pc.c
===================================================================
--- src/map/pc.c (revision 17156)
+++ src/map/pc.c (working copy)
@@ -982,6 +982,7 @@
sd->cantalk_tick = tick;
sd->canskill_tick = tick;
sd->cansendmail_tick = tick;
+ sd->canwarp_tick = tick; //warp on battle

for(i = 0; i < MAX_SKILL_LEVEL; i++)
sd->spirit_timer = INVALID_TIMER;
@@ -6505,6 +6506,7 @@
elemental_set_target(sd,src);

sd->canlog_tick = gettick();
+ sd->canwarp_tick = gettick() + battle_config.prevent_warponbattle; //warp on battle
}

/*==========================================
@@ -6842,6 +6844,11 @@
//Reset "can log out" tick.
if( battle_config.prevent_logout )
sd->canlog_tick = gettick() - battle_config.prevent_logout;
+
+ //warp on battle
+ if( battle_config.prevent_warponbattle )
+ sd->canwarp_tick = gettick() - battle_config.prevent_warponbattle;
+
return 1;
}

Index: src/map/pc.h
===================================================================
--- src/map/pc.h (revision 17156)
+++ src/map/pc.h (working copy)
@@ -216,6 +216,7 @@
unsigned int cansendmail_tick; // [Mail System Flood Protection]
unsigned int ks_floodprotect_tick; // [Kill Steal Protection]
unsigned int bloodylust_tick; // bloodylust player timer [out/in re full-heal protection]
+ unsigned int canwarp_tick; //delay for player when warp after attacking, receving damage, or using skill. //warp on battle

struct {
short nameid;
Index: src/map/skill.c
===================================================================
--- src/map/skill.c (revision 17156)
+++ src/map/skill.c (working copy)
@@ -7276,6 +7276,8 @@
int dx[9]={-1, 1, 0, 0,-1, 1,-1, 1, 0};
int dy[9]={ 0, 0, 1,-1, 1,-1,-1, 1, 0};
int j = 0;
+ int diff_tick, tick = gettick(); //warp on battle
+ char output[CHAT_SIZE_MAX]; //warp on battle
struct guild *g;
// i don't know if it actually summons in a circle, but oh well. ;P
g = sd?sd->state.gmaster_flag:guild_search(status_get_guild_id(src));
@@ -7287,6 +7289,13 @@
if ((dstsd = g->member.sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) {
if (map[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m))
continue;
+ //warp on battle
+ if((diff_tick = DIFF_TICK(sd->canwarp_tick,tick)) > 0 && !pc_has_permission(dstsd, PC_PERM_WARP_ANYWHERE))
+ {
+ sprintf(output, msg_txt(1555), diff_tick/1000., "get called by EMERGENCY CALL");
+ clif_displaymessage(dstsd->fd, output);
+ continue;
+ }
if(map_getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH))
dx[j] = dy[j] = 0;
pc_setpos(dstsd, map_id2index(src->m), src->x+dx[j], src->y+dy[j], CLR_RESPAWN);
Index: src/map/unit.c
===================================================================
--- src/map/unit.c (revision 17156)
+++ src/map/unit.c (working copy)
@@ -1368,6 +1368,9 @@
else
skill_castend_id(ud->skilltimer,tick,src->id,0);

+ if(sd) //warp on battle
+ sd->canwarp_tick = gettick() + battle_config.prevent_warponbattle;
+
return 1;
}

@@ -1505,6 +1508,10 @@
ud->skilltimer = INVALID_TIMER;
skill_castend_pos(ud->skilltimer,tick,src->id,0);
}
+
+ if(sd) //warp on battle
+ sd->canwarp_tick = gettick() + battle_config.prevent_warponbattle;
+
return 1;
}

@@ -1586,6 +1593,9 @@
unit_stop_attack(src);
return 0;
}
+ //warp on battle
+ if(battle_config.prevent_warponbattle)
+ sd->canwarp_tick = gettick() + battle_config.prevent_warponbattle;
}
if( battle_check_target(src,target,BCT_ENEMY) <= 0 || !status_check_skilluse(src, target, 0, 0) ) {
unit_unattackable(src);
@@ -1879,7 +1889,14 @@
struct block_list *bl;
bl = map_id2bl(id);
if(bl && unit_attack_timer_sub(bl, tid, tick) == 0)
+ {
+ //warp on battle
+ TBL_PC* sd = (TBL_PC*)bl;
+ if(sd && battle_config.prevent_warponbattle)
+ sd->canwarp_tick = gettick() + battle_config.prevent_warponbattle;
+
unit_unattackable(bl);
+ }
return 0;
}

[/cbox]

Edited by themon

Share this post


Link to post
Share on other sites
  • 0

yo, the msg number is wrong. :D
at that paste, on map_msg.conf

1399: You must wait %.1f sec. before %s.

but at the diff 

sprintf(atcmd_output, msg_txt(1555), diff_tick/1000., command);

some my mistake. xD

Edited by Cydh

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.