- Moved define CHAT_SIZE to clif.c, added define CHATBOX_SIZE to specify that 70 char limit of the input area.
- Fixed #lvup having the gm level check backwards. - Fixed the stormgust freeze counter going up even if the attack is blocked/cancelled. - Updated mes_len_check to receive max expected size as well (clif.c) - Cleaned up parsing functions for /mm, /resetskill, /resetstate, /item, /monster, /hide - git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9811 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
4b7dcab0f2
commit
c1d503fdcb
@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2007/02/06
|
2007/02/06
|
||||||
|
* Fixed #lvup having the gm level check backwards.
|
||||||
|
* Fixed the stormgust freeze counter going up even if the attack is
|
||||||
|
blocked/cancelled.
|
||||||
* Cleaned up homunc attack request parsing. Homunculus no longer goes into
|
* Cleaned up homunc attack request parsing. Homunculus no longer goes into
|
||||||
auto-attack (ctrl+click) mode since the client does every attack request
|
auto-attack (ctrl+click) mode since the client does every attack request
|
||||||
individually.
|
individually.
|
||||||
|
@ -1030,15 +1030,15 @@ int atcommand_config_read(const char *cfgName)
|
|||||||
*/
|
*/
|
||||||
int atcommand_commands(const int fd, struct map_session_data* sd, const char* command, const char* message)
|
int atcommand_commands(const int fd, struct map_session_data* sd, const char* command, const char* message)
|
||||||
{
|
{
|
||||||
char cz_line_buff[CHAT_SIZE+1];
|
char cz_line_buff[CHATBOX_SIZE+1];
|
||||||
|
|
||||||
register char *lpcz_cur = cz_line_buff;
|
register char *lpcz_cur = cz_line_buff;
|
||||||
register unsigned int ui_slen;
|
register unsigned int ui_slen;
|
||||||
|
|
||||||
int i_cur_cmd,gm_lvl = pc_isGM(sd), count = 0;
|
int i_cur_cmd,gm_lvl = pc_isGM(sd), count = 0;
|
||||||
|
|
||||||
memset(cz_line_buff,' ',CHAT_SIZE);
|
memset(cz_line_buff,' ',CHATBOX_SIZE);
|
||||||
cz_line_buff[CHAT_SIZE] = 0;
|
cz_line_buff[CHATBOX_SIZE] = 0;
|
||||||
|
|
||||||
clif_displaymessage(fd, msg_txt(273));
|
clif_displaymessage(fd, msg_txt(273));
|
||||||
|
|
||||||
@ -1051,12 +1051,12 @@ int atcommand_commands(const int fd, struct map_session_data* sd, const char* co
|
|||||||
ui_slen = (unsigned int)strlen(atcommand_info[i_cur_cmd].command);
|
ui_slen = (unsigned int)strlen(atcommand_info[i_cur_cmd].command);
|
||||||
|
|
||||||
//remember not <= bc we need null terminator
|
//remember not <= bc we need null terminator
|
||||||
if(((CHAT_SIZE+(int)cz_line_buff)-(int)lpcz_cur) < (int)ui_slen)
|
if(((CHATBOX_SIZE+(int)cz_line_buff)-(int)lpcz_cur) < (int)ui_slen)
|
||||||
{
|
{
|
||||||
clif_displaymessage(fd,(char*)cz_line_buff);
|
clif_displaymessage(fd,(char*)cz_line_buff);
|
||||||
lpcz_cur = cz_line_buff;
|
lpcz_cur = cz_line_buff;
|
||||||
memset(cz_line_buff,' ',CHAT_SIZE);
|
memset(cz_line_buff,' ',CHATBOX_SIZE);
|
||||||
cz_line_buff[CHAT_SIZE] = 0;
|
cz_line_buff[CHATBOX_SIZE] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(lpcz_cur,atcommand_info[i_cur_cmd].command,ui_slen);
|
memcpy(lpcz_cur,atcommand_info[i_cur_cmd].command,ui_slen);
|
||||||
|
@ -1302,7 +1302,7 @@ int charcommand_baselevel(
|
|||||||
clif_displaymessage(fd, msg_table[3]); // Character not found.
|
clif_displaymessage(fd, msg_table[3]); // Character not found.
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change base level only lower or same gm level
|
if (pc_isGM(sd) < pc_isGM(pl_sd)) { // you can change base level only lower or same gm level
|
||||||
clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
|
clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
111
src/map/clif.c
111
src/map/clif.c
@ -4,6 +4,9 @@
|
|||||||
#define DUMP_UNKNOWN_PACKET 0
|
#define DUMP_UNKNOWN_PACKET 0
|
||||||
#define DUMP_ALL_PACKETS 0
|
#define DUMP_ALL_PACKETS 0
|
||||||
|
|
||||||
|
//Talk max size: <name> : <message of 70> [Skotlex]
|
||||||
|
#define CHAT_SIZE (NAME_LENGTH + 3 + CHATBOX_SIZE)
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -94,7 +97,7 @@ struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB];
|
|||||||
#define disguised(bl) (bl->type==BL_PC && ((TBL_PC*)bl)->disguise)
|
#define disguised(bl) (bl->type==BL_PC && ((TBL_PC*)bl)->disguise)
|
||||||
|
|
||||||
//Guarantees that the given string does not exceeds the allowed size, as well as making sure it's null terminated. [Skotlex\]
|
//Guarantees that the given string does not exceeds the allowed size, as well as making sure it's null terminated. [Skotlex\]
|
||||||
#define mes_len_check(mes, len) if (len > CHAT_SIZE) { mes[CHAT_SIZE-1] = '\0'; len = CHAT_SIZE; } else mes[len-1] = '\0';
|
#define mes_len_check(mes, len, max) if (len > max) { mes[max-1] = '\0'; len = max; } else mes[len-1] = '\0';
|
||||||
static char map_ip_str[128];
|
static char map_ip_str[128];
|
||||||
static in_addr_t map_ip;
|
static in_addr_t map_ip;
|
||||||
static in_addr_t bind_ip = INADDR_ANY;
|
static in_addr_t bind_ip = INADDR_ANY;
|
||||||
@ -8665,23 +8668,25 @@ int clif_message(struct block_list *bl, char* msg)
|
|||||||
*/
|
*/
|
||||||
void clif_parse_MapMove(int fd, struct map_session_data *sd) {
|
void clif_parse_MapMove(int fd, struct map_session_data *sd) {
|
||||||
// /m /mapmove (as @rura GM command)
|
// /m /mapmove (as @rura GM command)
|
||||||
char output[30]; // 17+4+4=26, 30 max.
|
char output[MAP_NAME_LENGTH+15]; // Max length of a short: ' -6XXXX' -> 7 digits
|
||||||
char message[34]; // "/mm "+output
|
char message[MAP_NAME_LENGTH+15+5]; // "/mm "+output
|
||||||
char map_name[MAP_NAME_LENGTH]; //Err... map names are 15+'\0' in size, not 16+'\0' [Skotlex]
|
char *map_name;
|
||||||
RFIFOHEAD(fd);
|
RFIFOHEAD(fd);
|
||||||
|
|
||||||
if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
|
if (battle_config.atc_gmonly && !pc_isGM(sd))
|
||||||
(pc_isGM(sd) >= get_atcommand_level(AtCommand_MapMove))) {
|
return;
|
||||||
memcpy(map_name, RFIFOP(fd,2), MAP_NAME_LENGTH-1);
|
if(pc_isGM(sd) < get_atcommand_level(AtCommand_MapMove))
|
||||||
|
return;
|
||||||
|
|
||||||
|
map_name = RFIFOP(fd,2);
|
||||||
map_name[MAP_NAME_LENGTH-1]='\0';
|
map_name[MAP_NAME_LENGTH-1]='\0';
|
||||||
sprintf(output, "%s %d %d", map_name, RFIFOW(fd,18), RFIFOW(fd,20));
|
sprintf(output, "%s %d %d", map_name, RFIFOW(fd,18), RFIFOW(fd,20));
|
||||||
atcommand_rura(fd, sd, "@rura", output);
|
atcommand_rura(fd, sd, "@rura", output);
|
||||||
if((log_config.gm) && (get_atcommand_level(AtCommand_MapMove) >= log_config.gm)) {
|
if(log_config.gm && get_atcommand_level(AtCommand_MapMove) >= log_config.gm)
|
||||||
|
{
|
||||||
sprintf(message, "/mm %s", output);
|
sprintf(message, "/mm %s", output);
|
||||||
log_atcommand(sd, message);
|
log_atcommand(sd, message);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8950,7 +8955,8 @@ void clif_parse_Wis(int fd, struct map_session_data *sd) { // S 0096 <len>.w <ni
|
|||||||
msg = command;
|
msg = command;
|
||||||
msg+= sprintf(command, "%s : ", sd->status.name);
|
msg+= sprintf(command, "%s : ", sd->status.name);
|
||||||
memcpy(msg, RFIFOP(fd, 28), len);
|
memcpy(msg, RFIFOP(fd, 28), len);
|
||||||
mes_len_check(msg, len);
|
mes_len_check(msg, len, CHATBOX_SIZE);
|
||||||
|
|
||||||
if ((is_charcommand(fd, sd, command) != CharCommand_None) ||
|
if ((is_charcommand(fd, sd, command) != CharCommand_None) ||
|
||||||
(is_atcommand(fd, sd, command) != AtCommand_None)) {
|
(is_atcommand(fd, sd, command) != AtCommand_None)) {
|
||||||
aFree(command);
|
aFree(command);
|
||||||
@ -9118,7 +9124,7 @@ void clif_parse_GMmessage(int fd, struct map_session_data *sd) {
|
|||||||
|
|
||||||
size = WFIFOW(fd,2)-4;
|
size = WFIFOW(fd,2)-4;
|
||||||
mes = RFIFOP(fd,4);
|
mes = RFIFOP(fd,4);
|
||||||
mes_len_check(mes, size);
|
mes_len_check(mes, size, CHAT_SIZE);
|
||||||
|
|
||||||
intif_GMmessage(mes, size, 0);
|
intif_GMmessage(mes, size, 0);
|
||||||
if(log_config.gm && lv >= log_config.gm) {
|
if(log_config.gm && lv >= log_config.gm) {
|
||||||
@ -10097,21 +10103,19 @@ void clif_parse_SolveCharName(int fd, struct map_session_data *sd) {
|
|||||||
*/
|
*/
|
||||||
void clif_parse_ResetChar(int fd, struct map_session_data *sd) {
|
void clif_parse_ResetChar(int fd, struct map_session_data *sd) {
|
||||||
RFIFOHEAD(fd);
|
RFIFOHEAD(fd);
|
||||||
if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
|
if (battle_config.atc_gmonly && !pc_isGM(sd))
|
||||||
pc_isGM(sd) >= get_atcommand_level(AtCommand_ResetState)) {
|
return;
|
||||||
switch(RFIFOW(fd,2)){
|
if (pc_isGM(sd) < get_atcommand_level(AtCommand_ResetState))
|
||||||
case 0:
|
return;
|
||||||
pc_resetstate(sd);
|
|
||||||
break;
|
if (RFIFOW(fd,2))
|
||||||
case 1:
|
|
||||||
pc_resetskill(sd,1);
|
pc_resetskill(sd,1);
|
||||||
break;
|
else
|
||||||
}
|
pc_resetstate(sd);
|
||||||
if((log_config.gm) && (get_atcommand_level(AtCommand_ResetState) >= log_config.gm)) {
|
|
||||||
|
if(log_config.gm && get_atcommand_level(AtCommand_ResetState >= log_config.gm))
|
||||||
log_atcommand(sd, RFIFOW(fd,2) ? "/resetskill" : "/resetstate");
|
log_atcommand(sd, RFIFOW(fd,2) ? "/resetskill" : "/resetstate");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* 019c /lb等
|
* 019c /lb等
|
||||||
@ -10130,7 +10134,7 @@ void clif_parse_LGMmessage(int fd, struct map_session_data *sd) {
|
|||||||
|
|
||||||
len = RFIFOW(fd,2) - 4;
|
len = RFIFOW(fd,2) - 4;
|
||||||
mes = RFIFOP(fd,4);
|
mes = RFIFOP(fd,4);
|
||||||
mes_len_check(mes, len);
|
mes_len_check(mes, len, CHAT_SIZE);
|
||||||
|
|
||||||
WBUFW(buf,0) = 0x9a;
|
WBUFW(buf,0) = 0x9a;
|
||||||
WBUFW(buf,2) = len+4;
|
WBUFW(buf,2) = len+4;
|
||||||
@ -10364,7 +10368,7 @@ void clif_parse_PartyMessage(int fd, struct map_session_data *sd) {
|
|||||||
RFIFOHEAD(fd);
|
RFIFOHEAD(fd);
|
||||||
len = RFIFOW(fd,2) - 4;
|
len = RFIFOW(fd,2) - 4;
|
||||||
mes = RFIFOP(fd,4);
|
mes = RFIFOP(fd,4);
|
||||||
mes_len_check(mes, len);
|
mes_len_check(mes, len, CHAT_SIZE);
|
||||||
|
|
||||||
if (is_charcommand(fd, sd, mes) != CharCommand_None ||
|
if (is_charcommand(fd, sd, mes) != CharCommand_None ||
|
||||||
is_atcommand(fd, sd, mes) != AtCommand_None)
|
is_atcommand(fd, sd, mes) != AtCommand_None)
|
||||||
@ -10641,7 +10645,7 @@ void clif_parse_GuildMessage(int fd,struct map_session_data *sd) {
|
|||||||
RFIFOHEAD(fd);
|
RFIFOHEAD(fd);
|
||||||
len = RFIFOW(fd,2) - 4;
|
len = RFIFOW(fd,2) - 4;
|
||||||
mes = RFIFOP(fd,4);
|
mes = RFIFOP(fd,4);
|
||||||
mes_len_check(mes, len);
|
mes_len_check(mes, len, CHAT_SIZE);
|
||||||
|
|
||||||
if (is_charcommand(fd, sd, mes) != CharCommand_None ||
|
if (is_charcommand(fd, sd, mes) != CharCommand_None ||
|
||||||
is_atcommand(fd, sd, mes) != AtCommand_None)
|
is_atcommand(fd, sd, mes) != AtCommand_None)
|
||||||
@ -10894,46 +10898,50 @@ void clif_parse_Recall(int fd, struct map_session_data *sd) { // Added by RoVeRT
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* /monster /item rewriten by [Yor]
|
* /monster /item
|
||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
*/
|
*/
|
||||||
void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) {
|
void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) {
|
||||||
char monster_item_name[NAME_LENGTH+10]; //Additional space is for logging, eg: "@monster Poring"
|
char *monster_item_name;
|
||||||
|
char message[NAME_LENGTH+10]; //For logging.
|
||||||
int level;
|
int level;
|
||||||
|
|
||||||
memset(monster_item_name, '\0', sizeof(monster_item_name));
|
|
||||||
|
|
||||||
if (battle_config.atc_gmonly == 0 || pc_isGM(sd)) {
|
|
||||||
RFIFOHEAD(fd);
|
RFIFOHEAD(fd);
|
||||||
memcpy(monster_item_name, RFIFOP(fd,2), NAME_LENGTH);
|
|
||||||
|
|
||||||
if (mobdb_searchname(monster_item_name) != 0) {
|
if (battle_config.atc_gmonly && !pc_isGM(sd))
|
||||||
if (pc_isGM(sd) >= (level =get_atcommand_level(AtCommand_Spawn))) // changed from AtCommand_Monster for Skots [Reddozen]
|
return;
|
||||||
{
|
|
||||||
|
monster_item_name = RFIFOP(fd,2);
|
||||||
|
monster_item_name[NAME_LENGTH-1] = '\0';
|
||||||
|
|
||||||
|
if (mobdb_searchname(monster_item_name)) {
|
||||||
|
if (pc_isGM(sd) < (level=get_atcommand_level(AtCommand_Spawn)))
|
||||||
|
return;
|
||||||
atcommand_monster(fd, sd, "@spawn", monster_item_name); // as @spawn
|
atcommand_monster(fd, sd, "@spawn", monster_item_name); // as @spawn
|
||||||
if(log_config.gm && level >= log_config.gm)
|
if(log_config.gm && level >= log_config.gm)
|
||||||
{ //Log action. [Skotlex]
|
{ //Log action. [Skotlex]
|
||||||
snprintf(monster_item_name, sizeof(monster_item_name)-1, "@spawn %s", RFIFOP(fd,2));
|
snprintf(message, sizeof(message)-1, "@spawn %s", monster_item_name);
|
||||||
log_atcommand(sd, monster_item_name);
|
log_atcommand(sd, message);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
} else if (itemdb_searchname(monster_item_name) != NULL) {
|
if (itemdb_searchname(monster_item_name) == NULL)
|
||||||
if (pc_isGM(sd) >= (level = get_atcommand_level(AtCommand_Item)))
|
return;
|
||||||
{
|
if (pc_isGM(sd) < (level = get_atcommand_level(AtCommand_Item)))
|
||||||
|
return;
|
||||||
atcommand_item(fd, sd, "@item", monster_item_name); // as @item
|
atcommand_item(fd, sd, "@item", monster_item_name); // as @item
|
||||||
if(log_config.gm && level >= log_config.gm)
|
if(log_config.gm && level >= log_config.gm)
|
||||||
{ //Log action. [Skotlex]
|
{ //Log action. [Skotlex]
|
||||||
snprintf(monster_item_name, sizeof(monster_item_name)-1, "@item %s", RFIFOP(fd,2));
|
sprintf(message, "@item %s", monster_item_name);
|
||||||
log_atcommand(sd, monster_item_name);
|
log_atcommand(sd, message);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void clif_parse_GMHide(int fd, struct map_session_data *sd) { // Modified by [Yor]
|
void clif_parse_GMHide(int fd, struct map_session_data *sd) { // Modified by [Yor]
|
||||||
if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) &&
|
if (battle_config.atc_gmonly && !pc_isGM(sd))
|
||||||
(pc_isGM(sd) >= get_atcommand_level(AtCommand_Hide))) {
|
return;
|
||||||
|
if (pc_isGM(sd) < get_atcommand_level(AtCommand_Hide))
|
||||||
|
return;
|
||||||
|
|
||||||
if (sd->sc.option & OPTION_INVISIBLE) {
|
if (sd->sc.option & OPTION_INVISIBLE) {
|
||||||
sd->sc.option &= ~OPTION_INVISIBLE;
|
sd->sc.option &= ~OPTION_INVISIBLE;
|
||||||
if (sd->disguise)
|
if (sd->disguise)
|
||||||
@ -10943,16 +10951,13 @@ void clif_parse_GMHide(int fd, struct map_session_data *sd) { // Modified by [Yo
|
|||||||
clif_displaymessage(fd, "Invisible: Off.");
|
clif_displaymessage(fd, "Invisible: Off.");
|
||||||
} else {
|
} else {
|
||||||
sd->sc.option |= OPTION_INVISIBLE;
|
sd->sc.option |= OPTION_INVISIBLE;
|
||||||
//Experimental hidden mode, changes your view class to invisible [Skotlex]
|
|
||||||
sd->vd.class_ = INVISIBLE_CLASS;
|
sd->vd.class_ = INVISIBLE_CLASS;
|
||||||
clif_displaymessage(fd, "Invisible: On.");
|
clif_displaymessage(fd, "Invisible: On.");
|
||||||
if((log_config.gm) && (get_atcommand_level(AtCommand_Hide) >= log_config.gm)) {
|
if(log_config.gm && get_atcommand_level(AtCommand_Hide) >= log_config.gm)
|
||||||
log_atcommand(sd, "/hide");
|
log_atcommand(sd, "/hide");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
clif_changeoption(&sd->bl);
|
clif_changeoption(&sd->bl);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
* GMによるチャット禁止時間付与
|
* GMによるチャット禁止時間付与
|
||||||
|
@ -159,11 +159,11 @@ enum {
|
|||||||
MAPID_BABY_SOUL_LINKER,
|
MAPID_BABY_SOUL_LINKER,
|
||||||
};
|
};
|
||||||
|
|
||||||
//Talk max size: <name> : <message of 70> [Skotlex]
|
|
||||||
#define CHAT_SIZE (NAME_LENGTH + 3 + 70)
|
|
||||||
//Max size when inputting a string with those 'npc input boxes'
|
//Max size when inputting a string with those 'npc input boxes'
|
||||||
//(also used for Graffiti, Talkie Box, Vending, and Chatrooms)
|
//(also used for Graffiti, Talkie Box, Vending, and Chatrooms)
|
||||||
#define MESSAGE_SIZE 80
|
#define MESSAGE_SIZE 80
|
||||||
|
//String length you can write in the 'talking box'
|
||||||
|
#define CHATBOX_SIZE 70
|
||||||
|
|
||||||
#define DEFAULT_AUTOSAVE_INTERVAL 5*60*1000
|
#define DEFAULT_AUTOSAVE_INTERVAL 5*60*1000
|
||||||
|
|
||||||
|
@ -7130,11 +7130,9 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
|
|||||||
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
|
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
|
||||||
break;
|
break;
|
||||||
case WZ_STORMGUST:
|
case WZ_STORMGUST:
|
||||||
if (tsc)
|
if (skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0) > 0
|
||||||
{ //This should be safe as skill_additional_effect
|
&& tsc)
|
||||||
//won't be triggered if the attack is absorbed. [Skotlex]
|
{ //Increase freeze counter if attack connects.
|
||||||
//And if the target is already frozen,
|
|
||||||
//the counter is reset when it ends.
|
|
||||||
if (tsc->data[SC_FREEZE].val4 == sg->group_id)
|
if (tsc->data[SC_FREEZE].val4 == sg->group_id)
|
||||||
tsc->data[SC_FREEZE].val3++; //SG hit counter.
|
tsc->data[SC_FREEZE].val3++; //SG hit counter.
|
||||||
else { //New SG
|
else { //New SG
|
||||||
@ -7142,6 +7140,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
|
|||||||
tsc->data[SC_FREEZE].val3 = 1;
|
tsc->data[SC_FREEZE].val3 = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
|
skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user