From d3077435e81091746371cdcadfa879e5800fc91c Mon Sep 17 00:00:00 2001 From: Cydh Ramdh Date: Mon, 19 Sep 2016 10:03:53 +0700 Subject: [PATCH 01/67] Expand NPC Name Length to 50 Signed-off-by: Cydh Ramdh --- src/common/mmo.h | 2 ++ src/map/npc.c | 26 +++++++++++++------------- src/map/npc.h | 6 +++--- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/common/mmo.h b/src/common/mmo.h index f82b9e245f..49b4bb4070 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -96,6 +96,8 @@ //Includes null-terminator as it is the length of the array. #define NAME_LENGTH (23 + 1) #define PASSWD_LENGTH (32+1) +//NPC names can be longer than it's displayed on client (NAME_LENGTH). +#define NPC_NAME_LENGTH 50 //For item names, which tend to have much longer names. #define ITEM_NAME_LENGTH 50 //For Map Names, which the client considers to be 16 in length including the .gat extension diff --git a/src/map/npc.c b/src/map/npc.c index fe525d2a88..79b5023961 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -2222,27 +2222,27 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta { const char* p; struct npc_data* dnd;// duplicate npc - char newname[NAME_LENGTH]; + char newname[NPC_NAME_LENGTH+1]; // parse name p = strstr(name,"::"); if( p ) { // :: size_t len = p-name; - if( len > NAME_LENGTH ) { - ShowWarning("npc_parsename: Display name of '%s' is too long (len=%u) in file '%s', line'%d'. Truncating to %u characters.\n", name, (unsigned int)len, filepath, strline(buffer,start-buffer), NAME_LENGTH); + if( len > NPC_NAME_LENGTH ) { + ShowWarning("npc_parsename: Display name of '%s' is too long (len=%u) in file '%s', line'%d'. Truncating to %u characters.\n", name, (unsigned int)len, filepath, strline(buffer,start-buffer), NPC_NAME_LENGTH); safestrncpy(nd->name, name, sizeof(nd->name)); } else { memcpy(nd->name, name, len); memset(nd->name+len, 0, sizeof(nd->name)-len); } len = strlen(p+2); - if( len > NAME_LENGTH ) - ShowWarning("npc_parsename: Unique name of '%s' is too long (len=%u) in file '%s', line'%d'. Truncating to %u characters.\n", name, (unsigned int)len, filepath, strline(buffer,start-buffer), NAME_LENGTH); + if( len > NPC_NAME_LENGTH ) + ShowWarning("npc_parsename: Unique name of '%s' is too long (len=%u) in file '%s', line'%d'. Truncating to %u characters.\n", name, (unsigned int)len, filepath, strline(buffer,start-buffer), NPC_NAME_LENGTH); safestrncpy(nd->exname, p+2, sizeof(nd->exname)); } else {// size_t len = strlen(name); - if( len > NAME_LENGTH ) - ShowWarning("npc_parsename: Name '%s' is too long (len=%u) in file '%s', line'%d'. Truncating to %u characters.\n", name, (unsigned int)len, filepath, strline(buffer,start-buffer), NAME_LENGTH); + if( len > NPC_NAME_LENGTH ) + ShowWarning("npc_parsename: Name '%s' is too long (len=%u) in file '%s', line'%d'. Truncating to %u characters.\n", name, (unsigned int)len, filepath, strline(buffer,start-buffer), NPC_NAME_LENGTH); safestrncpy(nd->name, name, sizeof(nd->name)); safestrncpy(nd->exname, name, sizeof(nd->exname)); } @@ -2773,9 +2773,9 @@ int npc_convertlabel_db(DBKey key, DBData *data, va_list ap) len = p-lname; // here we check if the label fit into the buffer - if( len > 23 ) + if( len > NAME_LENGTH ) { - ShowError("npc_parse_script: label name longer than 23 chars! '%s'\n (%s)", lname, filepath); + ShowError("npc_parse_script: label name longer than %d chars! '%s'\n (%s)", NAME_LENGTH, lname, filepath); return 0; } @@ -3152,7 +3152,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch } int npc_duplicate4instance(struct npc_data *snd, int16 m) { - char newname[NAME_LENGTH]; + char newname[NPC_NAME_LENGTH+1]; if( map[m].instance_id == 0 ) return 1; @@ -4627,11 +4627,11 @@ void do_init_npc(void){ for( i = MAX_NPC_CLASS2_START; i < MAX_NPC_CLASS2_END; i++ ) npc_viewdb2[i - MAX_NPC_CLASS2_START].class_ = i; - ev_db = strdb_alloc((DBOptions)(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA),2*NAME_LENGTH+2+1); - npcname_db = strdb_alloc(DB_OPT_BASE,NAME_LENGTH); + ev_db = strdb_alloc((DBOptions)(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA), EVENT_NAME_LENGTH); + npcname_db = strdb_alloc(DB_OPT_BASE, NPC_NAME_LENGTH+1); npc_path_db = strdb_alloc(DB_OPT_BASE|DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA,80); #if PACKETVER >= 20131223 - NPCMarketDB = strdb_alloc(DB_OPT_BASE, NAME_LENGTH+1); + NPCMarketDB = strdb_alloc(DB_OPT_BASE, NPC_NAME_LENGTH+1); npc_market_fromsql(); #endif diff --git a/src/map/npc.h b/src/map/npc.h index bdc390ffb0..097d87db9c 100644 --- a/src/map/npc.h +++ b/src/map/npc.h @@ -17,7 +17,7 @@ struct npc_timerevent_list { }; struct npc_label_list { - char name[NAME_LENGTH]; + char name[NAME_LENGTH+1]; int pos; }; @@ -44,8 +44,8 @@ struct npc_data { struct status_change sc; //They can't have status changes, but.. they want the visual opt values. struct npc_data *master_nd; short class_,speed,instance_id; - char name[NAME_LENGTH+1];// display name - char exname[NAME_LENGTH+1];// unique npc name + char name[NPC_NAME_LENGTH+1];// display name + char exname[NPC_NAME_LENGTH+1];// unique npc name int chat_id,touching_id; unsigned int next_walktime; From 4d71a12d009c5a26807dda56b43e9e6655317eed Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Thu, 29 Sep 2016 19:37:23 +0200 Subject: [PATCH 02/67] Fixed a few EVENT_NAME_LENGTH usages --- src/map/npc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/map/npc.c b/src/map/npc.c index 79b5023961..33ad7c3903 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -430,7 +430,7 @@ int npc_event_doall(const char* name) int npc_event_doall_id(const char* name, int rid) { int c = 0; - char buf[64]; + char buf[EVENT_NAME_LENGTH]; safesnprintf(buf, sizeof(buf), "::%s", name); ev_db->foreach(ev_db,npc_event_doall_sub,&c,buf,rid); return c; @@ -445,7 +445,7 @@ int npc_event_do_clock(int tid, unsigned int tick, int id, intptr_t data) static struct tm ev_tm_b; // tracks previous execution time time_t timer; struct tm* t; - char buf[64]; + char buf[EVENT_NAME_LENGTH]; int c = 0; timer = time(NULL); @@ -3550,7 +3550,7 @@ int npc_do_atcmd_event(struct map_session_data* sd, const char* command, const c int l; ARR_FIND( 0, MAX_EVENTQUEUE, l, sd->eventqueue[l][0] == '\0' ); if( l < MAX_EVENTQUEUE ) { - safestrncpy(sd->eventqueue[l],eventname,50); //Event enqueued. + safestrncpy(sd->eventqueue[l],eventname,EVENT_NAME_LENGTH); //Event enqueued. return 0; } @@ -4380,9 +4380,9 @@ void npc_read_event_script(void) DBIterator* iter; DBKey key; DBData *data; + char name[EVENT_NAME_LENGTH]; - char name[64]="::"; - safestrncpy(name+2,config[i].event_name,62); + safesnprintf(name,EVENT_NAME_LENGTH,"::%s",config[i].event_name); script_event[i].event_count = 0; iter = db_iterator(ev_db); From b60f74c3dfe1bf75df8cdebf1589618be90fc419 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Mon, 3 Oct 2016 10:08:09 +0200 Subject: [PATCH 03/67] Sanity zero-termination for NAME_LENGTH usages --- src/map/clif.c | 175 +++++++++++++++++++++++++------------------------ 1 file changed, 88 insertions(+), 87 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index c18919193f..11bd1b6901 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1129,9 +1129,9 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool #endif #if PACKETVER >= 20091103 #if PACKETVER >= 20120221 - memcpy((char*)WBUFP(buf,64), name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,64), name, NAME_LENGTH); #else - memcpy((char*)WBUFP(buf,55), name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,55), name, NAME_LENGTH); #endif return WBUFW(buffer,2); #else @@ -1272,9 +1272,9 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un #endif #if PACKETVER >= 20091103 #if PACKETVER >= 20120221 - memcpy((char*)WBUFP(buf,71), name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,71), name, NAME_LENGTH); #else - memcpy((char*)WBUFP(buf,62), name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,62), name, NAME_LENGTH); #endif return WBUFW(buffer,2); #else @@ -1499,7 +1499,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) memset(buf,0,packet_len(cmd)); WBUFW(buf,0) = cmd; - memcpy(WBUFP(buf,2), hd->homunculus.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,2), hd->homunculus.name, NAME_LENGTH); // Bit field, bit 0 : rename_flag (1 = already renamed), bit 1 : homunc vaporized (1 = true), bit 2 : homunc dead (1 = true) WBUFB(buf,26) = (battle_config.hom_rename ? 0 : hd->homunculus.rename_flag) | (hd->homunculus.vaporize << 1) | (hd->homunculus.hp ? 0 : 4); WBUFW(buf,27) = hd->homunculus.level; @@ -4096,15 +4096,16 @@ void clif_joinchatok(struct map_session_data *sd,struct chat_data* cd) if(cd->owner->type == BL_NPC){ WFIFOL(fd, 30) = 1; WFIFOL(fd, 8) = 0; - memcpy(WFIFOP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); for (i = 0; i < cd->users; i++) { WFIFOL(fd, 8+(i+1)*28) = 1; - memcpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + } + }else{ + for (i = 0; i < cd->users; i++) { + WFIFOL(fd, 8+i*28) = (i != 0 || cd->owner->type == BL_NPC); + safestrncpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); } - } else - for (i = 0; i < cd->users; i++) { - WFIFOL(fd, 8+i*28) = (i != 0 || cd->owner->type == BL_NPC); - memcpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); } WFIFOSET(fd, WFIFOW(fd, 2)); } @@ -4121,7 +4122,7 @@ void clif_addchat(struct chat_data* cd,struct map_session_data *sd) WBUFW(buf, 0) = 0xdc; WBUFW(buf, 2) = cd->users; - memcpy(WBUFP(buf, 4),sd->status.name,NAME_LENGTH); + safestrncpy(WBUFP(buf, 4),sd->status.name,NAME_LENGTH); clif_send(buf,packet_len(0xdc),&sd->bl,CHAT_WOS); } @@ -4140,11 +4141,11 @@ void clif_changechatowner(struct chat_data* cd, struct map_session_data* sd) WBUFW(buf, 0) = 0xe1; WBUFL(buf, 2) = 1; - memcpy(WBUFP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH); + safestrncpy(WBUFP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH); WBUFW(buf,30) = 0xe1; WBUFL(buf,32) = 0; - memcpy(WBUFP(buf,36),sd->status.name,NAME_LENGTH); + safestrncpy(WBUFP(buf,36),sd->status.name,NAME_LENGTH); clif_send(buf,packet_len(0xe1)*2,&sd->bl,CHAT); } @@ -4164,7 +4165,7 @@ void clif_leavechat(struct chat_data* cd, struct map_session_data* sd, bool flag WBUFW(buf, 0) = 0xdd; WBUFW(buf, 2) = cd->users-1; - memcpy(WBUFP(buf,4),sd->status.name,NAME_LENGTH); + safestrncpy(WBUFP(buf,4),sd->status.name,NAME_LENGTH); WBUFB(buf,28) = flag; clif_send(buf,packet_len(0xdd),&sd->bl,CHAT); @@ -7218,8 +7219,8 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd) WBUFW(buf,10) = sd->bl.x; WBUFW(buf,12) = sd->bl.y; WBUFB(buf,14) = (p->party.member[i].online)?0:1; - memcpy(WBUFP(buf,15), p->party.name, NAME_LENGTH); - memcpy(WBUFP(buf,39), sd->status.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,15), p->party.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,39), sd->status.name, NAME_LENGTH); mapindex_getmapname_ext(map_mapid2mapname(sd->bl.m), (char*)WBUFP(buf,63)); WBUFB(buf,79) = (p->party.item&1)?1:0; WBUFB(buf,80) = (p->party.item&2)?1:0; @@ -7244,7 +7245,7 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) nullpo_retv(p); WBUFW(buf,0) = 0xfb; - memcpy(WBUFP(buf,4), p->party.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,4), p->party.name, NAME_LENGTH); for(i = 0, c = 0; i < MAX_PARTY; i++) { struct party_member* m = &p->party.member[i]; @@ -7253,7 +7254,7 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) if(party_sd == NULL) party_sd = p->data[i].sd; WBUFL(buf,28+c*46) = m->account_id; - memcpy(WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH); + safestrncpy(WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH); mapindex_getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28)); WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1; WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1; @@ -7311,7 +7312,7 @@ void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd) WFIFOHEAD(fd,packet_len(cmd)); WFIFOW(fd,0)=cmd; WFIFOL(fd,2)=sd->status.party_id; - memcpy(WFIFOP(fd,6),p->party.name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,6),p->party.name,NAME_LENGTH); WFIFOSET(fd,packet_len(cmd)); } @@ -7685,7 +7686,7 @@ void clif_send_petstatus(struct map_session_data *sd) pet = &sd->pd->pet; WFIFOHEAD(fd,packet_len(0x1a2)); WFIFOW(fd,0)=0x1a2; - memcpy(WFIFOP(fd,2),pet->name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,2),pet->name,NAME_LENGTH); WFIFOB(fd,26)=battle_config.pet_rename?0:pet->rename_flag; WFIFOW(fd,27)=pet->level; WFIFOW(fd,29)=pet->hungry; @@ -8002,7 +8003,7 @@ void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g) WFIFOL(fd,10)=g->position[ps].mode; WFIFOB(fd,14)=(bool)(sd->state.gmaster_flag==1); WFIFOL(fd,15)=0; // InterSID (unknown purpose) - memcpy(WFIFOP(fd,19),g->name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,19),g->name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x16c)); } @@ -8130,8 +8131,8 @@ void clif_guild_basicinfo(struct map_session_data *sd) { WFIFOL(fd,34)=0; // Honor: (left) Vulgar [-100,100] Famed (right) WFIFOL(fd,38)=0; // Virtue: (down) Wicked [-100,100] Righteous (up) WFIFOL(fd,42)=g->emblem_id; - memcpy(WFIFOP(fd,46),g->name, NAME_LENGTH); - memcpy(WFIFOP(fd,70),g->master, NAME_LENGTH); + safestrncpy(WFIFOP(fd,46),g->name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,70),g->master, NAME_LENGTH); safestrncpy((char*)WFIFOP(fd,94),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles" WFIFOL(fd,110) = 0; // zeny @@ -8159,7 +8160,7 @@ void clif_guild_allianceinfo(struct map_session_data *sd) if(a->guild_id>0){ WFIFOL(fd,c*32+4)=a->opposition; WFIFOL(fd,c*32+8)=a->guild_id; - memcpy(WFIFOP(fd,c*32+12),a->name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,c*32+12),a->name,NAME_LENGTH); c++; } } @@ -8204,7 +8205,7 @@ void clif_guild_memberlist(struct map_session_data *sd) WFIFOL(fd,c*104+26)=m->online; WFIFOL(fd,c*104+30)=m->position; memset(WFIFOP(fd,c*104+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty. - memcpy(WFIFOP(fd,c*104+84),m->name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,c*104+84),m->name,NAME_LENGTH); c++; } WFIFOW(fd, 2)=c*104+4; @@ -8228,7 +8229,7 @@ void clif_guild_positionnamelist(struct map_session_data *sd) WFIFOW(fd, 0)=0x166; for(i=0;iposition[i].name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,i*28+8),g->position[i].name,NAME_LENGTH); } WFIFOW(fd,2)=i*28+4; WFIFOSET(fd,WFIFOW(fd,2)); @@ -8290,7 +8291,7 @@ void clif_guild_positionchanged(struct guild *g,int idx) WBUFL(buf, 8)=g->position[idx].mode; WBUFL(buf,12)=idx; WBUFL(buf,16)=g->position[idx].exp_mode; - memcpy(WBUFP(buf,20),g->position[idx].name,NAME_LENGTH); + safestrncpy(WBUFP(buf,20),g->position[idx].name,NAME_LENGTH); // }* if( (sd=guild_getavailablesd(g))!=NULL ) clif_send(buf,WBUFW(buf,2),&sd->bl,GUILD); @@ -8436,7 +8437,7 @@ void clif_guild_invite(struct map_session_data *sd,struct guild *g) WFIFOHEAD(fd,packet_len(0x16a)); WFIFOW(fd,0)=0x16a; WFIFOL(fd,2)=g->guild_id; - memcpy(WFIFOP(fd,6),g->name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,6),g->name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x16a)); } @@ -8471,7 +8472,7 @@ void clif_guild_leave(struct map_session_data *sd,const char *name,const char *m nullpo_retv(sd); WBUFW(buf, 0)=0x15a; - memcpy(WBUFP(buf, 2),name,NAME_LENGTH); + safestrncpy(WBUFP(buf, 2),name,NAME_LENGTH); memcpy(WBUFP(buf,26),mes,40); clif_send(buf,packet_len(0x15a),&sd->bl,GUILD_NOBG); } @@ -8530,7 +8531,7 @@ void clif_guild_expulsionlist(struct map_session_data* sd) if( e->account_id > 0 ) { - memcpy(WFIFOP(fd,4 + c*offset), e->name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,4 + c*offset), e->name, NAME_LENGTH); #if PACKETVER < 20100803 memset(WFIFOP(fd,4 + c*offset+24), 0, NAME_LENGTH); // account name (not used for security reasons) memcpy(WFIFOP(fd,4 + c*offset+48), e->mes, 40); @@ -8582,7 +8583,7 @@ void clif_guild_reqalliance(struct map_session_data *sd,uint32 account_id,const WFIFOHEAD(fd,packet_len(0x171)); WFIFOW(fd,0)=0x171; WFIFOL(fd,2)=account_id; - memcpy(WFIFOP(fd,6),name,NAME_LENGTH); + safestrncpy(WFIFOP(fd,6),name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x171)); } @@ -8662,7 +8663,7 @@ void clif_guild_allianceadded(struct guild *g,int idx) WBUFW(buf,0)=0x185; WBUFL(buf,2)=g->alliance[idx].opposition; WBUFL(buf,6)=g->alliance[idx].guild_id; - memcpy(WBUFP(buf,10),g->alliance[idx].name,NAME_LENGTH); + safestrncpy(WBUFP(buf,10),g->alliance[idx].name,NAME_LENGTH); clif_send(buf,packet_len(0x185),guild_getavailablesd(g),GUILD); } */ @@ -8746,7 +8747,7 @@ void clif_callpartner(struct map_session_data *sd) const char *p = map_charid2nick(sd->status.partner_id); struct map_session_data *p_sd = pc_get_partner(sd); if( p != NULL && p_sd != NULL && !p_sd->state.autotrade ) - memcpy(WBUFP(buf,2), p, NAME_LENGTH); + safestrncpy(WBUFP(buf,2), p, NAME_LENGTH); else WBUFB(buf,2) = 0; } else {// Send zero-length name if no partner, to initialize the client buffer. @@ -8784,7 +8785,7 @@ void clif_divorced(struct map_session_data* sd, const char* name) fd=sd->fd; WFIFOHEAD(fd,packet_len(0x205)); WFIFOW(fd,0)=0x205; - memcpy(WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,2), name, NAME_LENGTH); WFIFOSET(fd, packet_len(0x205)); } @@ -9264,11 +9265,11 @@ void clif_charnameack (int fd, struct block_list *bl) if( ssd->fakename[0] ) { WBUFW(buf, 0) = cmd = 0x195; - memcpy(WBUFP(buf,6), ssd->fakename, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ssd->fakename, NAME_LENGTH); WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0; break; } - memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); if( ssd->status.party_id ) { p = party_search(ssd->status.party_id); @@ -9291,14 +9292,14 @@ void clif_charnameack (int fd, struct block_list *bl) WBUFW(buf, 0) = cmd = 0x195; if (p) - memcpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); else WBUFB(buf,30) = 0; if (g && ps >= 0 && ps < MAX_GUILDPOSITION) { - memcpy(WBUFP(buf,54), g->name,NAME_LENGTH); - memcpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); + safestrncpy(WBUFP(buf,54), g->name,NAME_LENGTH); + safestrncpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); } else { //Assume no guild. WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; @@ -9307,29 +9308,29 @@ void clif_charnameack (int fd, struct block_list *bl) break; //[blackhole89] case BL_HOM: - memcpy(WBUFP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH); break; case BL_MER: - memcpy(WBUFP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH); break; case BL_PET: - memcpy(WBUFP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH); break; case BL_NPC: - memcpy(WBUFP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH); break; case BL_MOB: { struct mob_data *md = (struct mob_data *)bl; nullpo_retv(md); - memcpy(WBUFP(buf,6), md->name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), md->name, NAME_LENGTH); if( md->guardian_data && md->guardian_data->guild_id ) { WBUFW(buf, 0) = cmd = 0x195; WBUFB(buf,30) = 0; - memcpy(WBUFP(buf,54), md->guardian_data->guild_name, NAME_LENGTH); - memcpy(WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH); + safestrncpy(WBUFP(buf,54), md->guardian_data->guild_name, NAME_LENGTH); + safestrncpy(WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH); } else if( battle_config.show_mob_info ) { @@ -9346,7 +9347,7 @@ void clif_charnameack (int fd, struct block_list *bl) if( str_p != mobhp ) { *(str_p-3) = '\0'; //Remove trailing space + pipe. - memcpy(WBUFP(buf,30), mobhp, NAME_LENGTH); + safestrncpy(WBUFP(buf,30), mobhp, NAME_LENGTH); WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; } @@ -9354,11 +9355,11 @@ void clif_charnameack (int fd, struct block_list *bl) } break; case BL_CHAT: //FIXME: Clients DO request this... what should be done about it? The chat's title may not fit... [Skotlex] -// memcpy(WBUFP(buf,6), (struct chat*)->title, NAME_LENGTH); +// safestrncpy(WBUFP(buf,6), (struct chat*)->title, NAME_LENGTH); // break; return; case BL_ELEM: - memcpy(WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); break; default: ShowError("clif_charnameack: bad type %d(%d)\n", bl->type, bl->id); @@ -9393,7 +9394,7 @@ void clif_charnameupdate (struct map_session_data *ssd) WBUFW(buf,0) = cmd; WBUFL(buf,2) = ssd->bl.id; - memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); if (!battle_config.display_party_name) { if (ssd->status.party_id > 0 && ssd->status.guild_id > 0 && (g = ssd->guild) != NULL) @@ -9411,14 +9412,14 @@ void clif_charnameupdate (struct map_session_data *ssd) } if( p ) - memcpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); else WBUFB(buf,30) = 0; if( g && ps >= 0 && ps < MAX_GUILDPOSITION ) { - memcpy(WBUFP(buf,54), g->name,NAME_LENGTH); - memcpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); + safestrncpy(WBUFP(buf,54), g->name,NAME_LENGTH); + safestrncpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); } else { @@ -12890,7 +12891,7 @@ void clif_PartyBookingSearchAck(int fd, struct party_booking_ad_info** results, { pb_ad = results[i]; WFIFOL(fd,i*size+5) = pb_ad->index; - memcpy(WFIFOP(fd,i*size+9),pb_ad->charname,NAME_LENGTH); + safestrncpy(WFIFOP(fd,i*size+9),pb_ad->charname,NAME_LENGTH); WFIFOL(fd,i*size+33) = pb_ad->starttime; // FIXME: This is expire time WFIFOW(fd,i*size+37) = pb_ad->p_detail.level; WFIFOW(fd,i*size+39) = pb_ad->p_detail.mapid; @@ -12954,7 +12955,7 @@ void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_boo WBUFW(buf,0) = 0x809; WBUFL(buf,2) = pb_ad->index; - memcpy(WBUFP(buf,6),pb_ad->charname,NAME_LENGTH); + safestrncpy(WBUFP(buf,6),pb_ad->charname,NAME_LENGTH); WBUFL(buf,30) = pb_ad->starttime; // FIXME: This is expire time WBUFW(buf,34) = pb_ad->p_detail.level; WBUFW(buf,36) = pb_ad->p_detail.mapid; @@ -14003,7 +14004,7 @@ void clif_PMIgnoreList(struct map_session_data* sd) WFIFOW(fd,0) = 0xd4; for( i = 0; i < ARRAYLENGTH(sd->ignore) && sd->ignore[i].name[0]; i++ ) { - memcpy(WFIFOP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH); } WFIFOW(fd,2) = 4+i*NAME_LENGTH; @@ -14118,7 +14119,7 @@ void clif_friendslist_send(struct map_session_data *sd) for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) { WFIFOL(fd, 4 + 32 * i + 0) = sd->status.friends[i].account_id; WFIFOL(fd, 4 + 32 * i + 4) = sd->status.friends[i].char_id; - memcpy(WFIFOP(fd, 4 + 32 * i + 8), &sd->status.friends[i].name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 4 + 32 * i + 8), &sd->status.friends[i].name, NAME_LENGTH); } if (i) { @@ -14152,7 +14153,7 @@ void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_dat if (f_sd) { WFIFOL(fd,4) = f_sd->status.account_id; WFIFOL(fd,8) = f_sd->status.char_id; - memcpy(WFIFOP(fd, 12), f_sd->status.name,NAME_LENGTH); + safestrncpy(WFIFOP(fd, 12), f_sd->status.name,NAME_LENGTH); } WFIFOSET(fd, packet_len(0x209)); } @@ -14168,7 +14169,7 @@ void clif_friendlist_req(struct map_session_data* sd, uint32 account_id, uint32 WFIFOW(fd,0) = 0x207; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = char_id; - memcpy(WFIFOP(fd,10), name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,10), name, NAME_LENGTH); WFIFOSET(fd,packet_len(0x207)); } @@ -14264,7 +14265,7 @@ void clif_parse_FriendsListReply(int fd, struct map_session_data *sd) f_sd->status.friends[i].account_id = sd->status.account_id; f_sd->status.friends[i].char_id = sd->status.char_id; - memcpy(f_sd->status.friends[i].name, sd->status.name, NAME_LENGTH); + safestrncpy(f_sd->status.friends[i].name, sd->status.name, NAME_LENGTH); clif_friendslist_reqack(f_sd, sd, 0); if (battle_config.friend_auto_add) { @@ -14282,7 +14283,7 @@ void clif_parse_FriendsListReply(int fd, struct map_session_data *sd) sd->status.friends[i].account_id = f_sd->status.account_id; sd->status.friends[i].char_id = f_sd->status.char_id; - memcpy(sd->status.friends[i].name, f_sd->status.name, NAME_LENGTH); + safestrncpy(sd->status.friends[i].name, f_sd->status.name, NAME_LENGTH); clif_friendslist_reqack(sd, f_sd, 0); } } @@ -14397,15 +14398,15 @@ void clif_blacksmith(struct map_session_data* sd) if (strcmp(smith_fame_list[i].name, "-") == 0 && (name = map_charid2nick(smith_fame_list[i].id)) != NULL) { - strncpy((char *)(WFIFOP(fd, 2 + 24 * i)), name, NAME_LENGTH); + safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), name, NAME_LENGTH); } else - strncpy((char *)(WFIFOP(fd, 2 + 24 * i)), smith_fame_list[i].name, NAME_LENGTH); + safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), smith_fame_list[i].name, NAME_LENGTH); } else - strncpy((char *)(WFIFOP(fd, 2 + 24 * i)), "None", 5); + safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), "None", 5); WFIFOL(fd, 242 + i * 4) = smith_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - strncpy((char *)(WFIFOP(fd, 2 + 24 * i)), "Unavailable", 12); + safestrncpy((char *)(WFIFOP(fd, 2 + 24 * i)), "Unavailable", 12); WFIFOL(fd, 242 + i * 4) = 0; } @@ -14450,15 +14451,15 @@ void clif_alchemist(struct map_session_data* sd) if (strcmp(chemist_fame_list[i].name, "-") == 0 && (name = map_charid2nick(chemist_fame_list[i].id)) != NULL) { - memcpy(WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); } else - memcpy(WFIFOP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH); } else - memcpy(WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = chemist_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - memcpy(WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = 0; } @@ -14503,15 +14504,15 @@ void clif_taekwon(struct map_session_data* sd) if (strcmp(taekwon_fame_list[i].name, "-") == 0 && (name = map_charid2nick(taekwon_fame_list[i].id)) != NULL) { - memcpy(WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); } else - memcpy(WFIFOP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH); } else - memcpy(WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = taekwon_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - memcpy(WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); + safestrncpy(WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = 0; } WFIFOSET(fd, packet_len(0x226)); @@ -14549,7 +14550,7 @@ void clif_ranking_pk(struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0x238)); WFIFOW(fd,0) = 0x238; for(i=0;i<10;i++){ - memcpy(WFIFOP(fd,i*24+2), "Unknown", NAME_LENGTH); + safestrncpy(WFIFOP(fd,i*24+2), "Unknown", NAME_LENGTH); WFIFOL(fd,i*4+242) = 0; } WFIFOSET(fd, packet_len(0x238)); @@ -14926,7 +14927,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd) WFIFOL(fd,8+73*j) = msg->id; memcpy(WFIFOP(fd,12+73*j), msg->title, MAIL_TITLE_LENGTH); WFIFOB(fd,52+73*j) = (msg->status != MAIL_UNREAD); - memcpy(WFIFOP(fd,53+73*j), msg->send_name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,53+73*j), msg->send_name, NAME_LENGTH); WFIFOL(fd,77+73*j) = (uint32)msg->timestamp; j++; } @@ -15785,7 +15786,7 @@ void clif_Adopt_request(struct map_session_data *sd, struct map_session_data *sr WFIFOW(fd,0) = 0x1f6; WFIFOL(fd,2) = src->status.account_id; WFIFOL(fd,6) = p_id; - memcpy(WFIFOP(fd,10), src->status.name, NAME_LENGTH); + safestrncpy(WFIFOP(fd,10), src->status.name, NAME_LENGTH); WFIFOSET(fd,34); } @@ -15980,7 +15981,7 @@ void clif_quest_send_list(struct map_session_data *sd) offset += 2; WFIFOW(fd, offset) = qi->objectives[j].count; offset += 2; - memcpy(WFIFOP(fd, offset), mob->jname, NAME_LENGTH); + safestrncpy(WFIFOP(fd, offset), mob->jname, NAME_LENGTH); offset += NAME_LENGTH; } } @@ -16033,7 +16034,7 @@ void clif_quest_send_mission(struct map_session_data *sd) WFIFOL(fd, i*104+22+j*30) = qi->objectives[j].mob; WFIFOW(fd, i*104+26+j*30) = sd->quest_log[i].count[j]; mob = mob_db(qi->objectives[j].mob); - memcpy(WFIFOP(fd, i*104+28+j*30), mob->jname, NAME_LENGTH); + safestrncpy(WFIFOP(fd, i*104+28+j*30), mob->jname, NAME_LENGTH); } } @@ -16062,7 +16063,7 @@ void clif_quest_add(struct map_session_data *sd, struct quest *qd) WFIFOL(fd, i*30+17) = qi->objectives[i].mob; WFIFOW(fd, i*30+21) = qd->count[i]; mob = mob_db(qi->objectives[i].mob); - memcpy(WFIFOP(fd, i*30+23), mob->jname, NAME_LENGTH); + safestrncpy(WFIFOP(fd, i*30+23), mob->jname, NAME_LENGTH); } WFIFOSET(fd, packet_len(0x2b3)); @@ -16393,7 +16394,7 @@ void clif_bg_hp(struct map_session_data *sd) { WBUFW(buf,0) = cmd; WBUFL(buf,2) = sd->status.account_id; #if PACKETVER < 20140613 - memcpy(WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), sd->status.name, NAME_LENGTH); if( sd->battle_status.max_hp > INT16_MAX ) { // To correctly display the %hp bar. [Skotlex] WBUFW(buf,30) = sd->battle_status.hp/(sd->battle_status.max_hp/100); WBUFW(buf,32) = 100; @@ -16423,7 +16424,7 @@ void clif_bg_xy(struct map_session_data *sd) WBUFW(buf,0)=0x2df; WBUFL(buf,2)=sd->status.account_id; - memcpy(WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy(WBUFP(buf,6), sd->status.name, NAME_LENGTH); WBUFW(buf,30)=sd->status.class_; WBUFW(buf,32)=sd->bl.x; WBUFW(buf,34)=sd->bl.y; @@ -16461,7 +16462,7 @@ void clif_bg_message(struct battleground_data *bg, int src_id, const char *name, WBUFW(buf,0) = 0x2dc; WBUFW(buf,2) = len + NAME_LENGTH + 8; WBUFL(buf,4) = src_id; - memcpy(WBUFP(buf,8), name, NAME_LENGTH); + safestrncpy(WBUFP(buf,8), name, NAME_LENGTH); memcpy(WBUFP(buf,32), mes, len); clif_send(buf,WBUFW(buf,2), &sd->bl, BG); @@ -17796,17 +17797,17 @@ void clif_sub_ranklist(unsigned char *buf,int idx,struct map_session_data* sd, i if (strcmp(list[i].name, "-") == 0 && (name = map_charid2nick(list[i].id)) != NULL) { - strncpy((char *)(WBUFP(buf,idx + 24 * i)), name, NAME_LENGTH); + safestrncpy((char *)(WBUFP(buf,idx + 24 * i)), name, NAME_LENGTH); } else { - strncpy((char *)(WBUFP(buf,idx + 24 * i)), list[i].name, NAME_LENGTH); + safestrncpy((char *)(WBUFP(buf,idx + 24 * i)), list[i].name, NAME_LENGTH); } } else { - strncpy((char *)(WBUFP(buf, idx + 24 * i)), "None", 5); + safestrncpy((char *)(WBUFP(buf, idx + 24 * i)), "None", 5); } WBUFL(buf, idx+24*10 + i * 4) = list[i].fame; //points } for(;i < 10; i++) { //In case the MAX is less than 10. - strncpy((char *)(WBUFP(buf, idx + 24 * i)), "Unavailable", 12); + safestrncpy((char *)(WBUFP(buf, idx + 24 * i)), "Unavailable", 12); WBUFL(buf, idx+24*10 + i * 4) = 0; } } From e443f846c610d870b8d3d38526d09f0ec00ad44f Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Wed, 12 Oct 2016 22:52:40 +0200 Subject: [PATCH 04/67] Increased EVENT_NAME_LENGTH and some more cleanups Fixed an invalid reference in clif.c(follow up to 008be23) Moved the OnWhisperGlobal name definition to the other special event name declarations Increased EVENT_NAME_LENGTH from 51 to 77 characters because it uses NPCs exname which can be up to 50 characters now Added a warning when an NPCs exname is too long for an OnWhisperEvent --- src/map/clif.c | 4 ++-- src/map/map.h | 4 ++-- src/map/npc.c | 8 ++++++++ src/map/script.c | 2 ++ src/map/script.h | 1 + 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index 11bd1b6901..b76197668a 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11035,7 +11035,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) set_var(sd,variablename,(char *) split_data[i]); } - safesnprintf(event,sizeof(event),"%s::OnWhisperGlobal", npc->exname); + safesnprintf(event,sizeof(event),"%s::%s", npc->exname,script_config.onwhisper_event_name); npc_event(sd,event,0); // Calls the NPC label return; @@ -14119,7 +14119,7 @@ void clif_friendslist_send(struct map_session_data *sd) for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) { WFIFOL(fd, 4 + 32 * i + 0) = sd->status.friends[i].account_id; WFIFOL(fd, 4 + 32 * i + 4) = sd->status.friends[i].char_id; - safestrncpy(WFIFOP(fd, 4 + 32 * i + 8), &sd->status.friends[i].name, NAME_LENGTH); + safestrncpy(WFIFOP(fd, 4 + 32 * i + 8), sd->status.friends[i].name, NAME_LENGTH); } if (i) { diff --git a/src/map/map.h b/src/map/map.h index b61980d030..8f2ec969fe 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -211,8 +211,8 @@ enum e_mapid { #define CHATROOM_PASS_SIZE (8 + 1) //Max allowed chat text length #define CHAT_SIZE_MAX (255 + 1) -//24 for npc name + 24 for label + 2 for a "::" and 1 for EOS -#define EVENT_NAME_LENGTH ( NAME_LENGTH * 2 + 3 ) +// for npc name + 2 for a "::" + for label + 1 for EOS +#define EVENT_NAME_LENGTH ( NPC_NAME_LENGTH + 2 + NAME_LENGTH + 1 ) #define DEFAULT_AUTOSAVE_INTERVAL 5*60*1000 diff --git a/src/map/npc.c b/src/map/npc.c index 33ad7c3903..b005f4c4cf 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -336,6 +336,14 @@ static int npc_event_export(struct npc_data *nd, int i) if ((lname[0] == 'O' || lname[0] == 'o') && (lname[1] == 'N' || lname[1] == 'n')) { struct event_data *ev; char buf[EVENT_NAME_LENGTH]; + + // NPC: the prefix uses 4 characters + if( !strncasecmp( lname, script_config.onwhisper_event_name, NAME_LENGTH ) && strlen(nd->exname) > ( NAME_LENGTH - 4 ) ){ + // The client only allows that many character so that NPC could not be whispered by unmodified clients + ShowWarning( "Whisper event in npc '"CL_WHITE"%s"CL_RESET"' was ignored, because it's name is too long.\n", nd->exname ); + return 0; + } + snprintf(buf, ARRAYLENGTH(buf), "%s::%s", nd->exname, lname); // generate the data and insert it CREATE(ev, struct event_data, 1); diff --git a/src/map/script.c b/src/map/script.c index b42486cf07..73f8c452ff 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -185,6 +185,7 @@ struct Script_Config script_config = { 1, // warn_func_mismatch_argtypes 1, 65535, 2048, //warn_func_mismatch_paramnum/check_cmdcount/check_gotocount 0, INT_MAX, // input_min_value/input_max_value + // NOTE: None of these event labels should be longer than characters "OnPCDieEvent", //die_event_name "OnPCKillEvent", //kill_pc_event_name "OnNPCKillEvent", //kill_mob_event_name @@ -196,6 +197,7 @@ struct Script_Config script_config = { "OnPCStatCalcEvent", //stat_calc_event_name "OnTouch_", //ontouch_name (runs on first visible char to enter area, picks another char if the first char leaves) "OnTouch", //ontouch2_name (run whenever a char walks into the OnTouch area) + "OnWhisperGlobal", //onwhisper_event_name (is executed when a player sends a whisper message to the NPC) }; static jmp_buf error_jump; diff --git a/src/map/script.h b/src/map/script.h index 1e07e2774f..8a1ee42813 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -160,6 +160,7 @@ extern struct Script_Config { const char* ontouch_name; const char* ontouch2_name; + const char* onwhisper_event_name; } script_config; typedef enum c_op { From 6a8985531be1488a103c76a3a030b4325c8c5016 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Thu, 13 Oct 2016 08:32:40 +0200 Subject: [PATCH 05/67] Fixed NPC markets Fixed signedness warnings for the sanity zero-terminations --- sql-files/main.sql | 2 +- sql-files/upgrades/upgrade_20161013.sql | 2 + src/map/clif.c | 134 ++++++++++++------------ src/map/npc.c | 4 +- 4 files changed, 72 insertions(+), 70 deletions(-) create mode 100644 sql-files/upgrades/upgrade_20161013.sql diff --git a/sql-files/main.sql b/sql-files/main.sql index e81a7f5bef..8de609474d 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -715,7 +715,7 @@ CREATE TABLE IF NOT EXISTS `mapreg` ( -- CREATE TABLE IF NOT EXISTS `market` ( - `name` varchar(32) NOT NULL DEFAULT '', + `name` varchar(50) NOT NULL DEFAULT '', `nameid` SMALLINT(5) UNSIGNED NOT NULL, `price` INT(11) UNSIGNED NOT NULL, `amount` SMALLINT(5) UNSIGNED NOT NULL, diff --git a/sql-files/upgrades/upgrade_20161013.sql b/sql-files/upgrades/upgrade_20161013.sql new file mode 100644 index 0000000000..a6b6e48413 --- /dev/null +++ b/sql-files/upgrades/upgrade_20161013.sql @@ -0,0 +1,2 @@ +ALTER TABLE `market` + MODIFY `name` varchar(50) NOT NULL DEFAULT ''; diff --git a/src/map/clif.c b/src/map/clif.c index b76197668a..9ed69928a1 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1499,7 +1499,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) memset(buf,0,packet_len(cmd)); WBUFW(buf,0) = cmd; - safestrncpy(WBUFP(buf,2), hd->homunculus.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,2), hd->homunculus.name, NAME_LENGTH); // Bit field, bit 0 : rename_flag (1 = already renamed), bit 1 : homunc vaporized (1 = true), bit 2 : homunc dead (1 = true) WBUFB(buf,26) = (battle_config.hom_rename ? 0 : hd->homunculus.rename_flag) | (hd->homunculus.vaporize << 1) | (hd->homunculus.hp ? 0 : 4); WBUFW(buf,27) = hd->homunculus.level; @@ -4096,15 +4096,15 @@ void clif_joinchatok(struct map_session_data *sd,struct chat_data* cd) if(cd->owner->type == BL_NPC){ WFIFOL(fd, 30) = 1; WFIFOL(fd, 8) = 0; - safestrncpy(WFIFOP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); for (i = 0; i < cd->users; i++) { WFIFOL(fd, 8+(i+1)*28) = 1; - safestrncpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); } }else{ for (i = 0; i < cd->users; i++) { WFIFOL(fd, 8+i*28) = (i != 0 || cd->owner->type == BL_NPC); - safestrncpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); } } WFIFOSET(fd, WFIFOW(fd, 2)); @@ -4122,7 +4122,7 @@ void clif_addchat(struct chat_data* cd,struct map_session_data *sd) WBUFW(buf, 0) = 0xdc; WBUFW(buf, 2) = cd->users; - safestrncpy(WBUFP(buf, 4),sd->status.name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf, 4),sd->status.name,NAME_LENGTH); clif_send(buf,packet_len(0xdc),&sd->bl,CHAT_WOS); } @@ -4141,11 +4141,11 @@ void clif_changechatowner(struct chat_data* cd, struct map_session_data* sd) WBUFW(buf, 0) = 0xe1; WBUFL(buf, 2) = 1; - safestrncpy(WBUFP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH); WBUFW(buf,30) = 0xe1; WBUFL(buf,32) = 0; - safestrncpy(WBUFP(buf,36),sd->status.name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,36),sd->status.name,NAME_LENGTH); clif_send(buf,packet_len(0xe1)*2,&sd->bl,CHAT); } @@ -4165,7 +4165,7 @@ void clif_leavechat(struct chat_data* cd, struct map_session_data* sd, bool flag WBUFW(buf, 0) = 0xdd; WBUFW(buf, 2) = cd->users-1; - safestrncpy(WBUFP(buf,4),sd->status.name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,4),sd->status.name,NAME_LENGTH); WBUFB(buf,28) = flag; clif_send(buf,packet_len(0xdd),&sd->bl,CHAT); @@ -7219,8 +7219,8 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd) WBUFW(buf,10) = sd->bl.x; WBUFW(buf,12) = sd->bl.y; WBUFB(buf,14) = (p->party.member[i].online)?0:1; - safestrncpy(WBUFP(buf,15), p->party.name, NAME_LENGTH); - safestrncpy(WBUFP(buf,39), sd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,15), p->party.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,39), sd->status.name, NAME_LENGTH); mapindex_getmapname_ext(map_mapid2mapname(sd->bl.m), (char*)WBUFP(buf,63)); WBUFB(buf,79) = (p->party.item&1)?1:0; WBUFB(buf,80) = (p->party.item&2)?1:0; @@ -7245,7 +7245,7 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) nullpo_retv(p); WBUFW(buf,0) = 0xfb; - safestrncpy(WBUFP(buf,4), p->party.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,4), p->party.name, NAME_LENGTH); for(i = 0, c = 0; i < MAX_PARTY; i++) { struct party_member* m = &p->party.member[i]; @@ -7254,7 +7254,7 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) if(party_sd == NULL) party_sd = p->data[i].sd; WBUFL(buf,28+c*46) = m->account_id; - safestrncpy(WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH); mapindex_getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28)); WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1; WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1; @@ -7312,7 +7312,7 @@ void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd) WFIFOHEAD(fd,packet_len(cmd)); WFIFOW(fd,0)=cmd; WFIFOL(fd,2)=sd->status.party_id; - safestrncpy(WFIFOP(fd,6),p->party.name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,6),p->party.name,NAME_LENGTH); WFIFOSET(fd,packet_len(cmd)); } @@ -7686,7 +7686,7 @@ void clif_send_petstatus(struct map_session_data *sd) pet = &sd->pd->pet; WFIFOHEAD(fd,packet_len(0x1a2)); WFIFOW(fd,0)=0x1a2; - safestrncpy(WFIFOP(fd,2),pet->name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,2),pet->name,NAME_LENGTH); WFIFOB(fd,26)=battle_config.pet_rename?0:pet->rename_flag; WFIFOW(fd,27)=pet->level; WFIFOW(fd,29)=pet->hungry; @@ -8003,7 +8003,7 @@ void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g) WFIFOL(fd,10)=g->position[ps].mode; WFIFOB(fd,14)=(bool)(sd->state.gmaster_flag==1); WFIFOL(fd,15)=0; // InterSID (unknown purpose) - safestrncpy(WFIFOP(fd,19),g->name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,19),g->name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x16c)); } @@ -8131,8 +8131,8 @@ void clif_guild_basicinfo(struct map_session_data *sd) { WFIFOL(fd,34)=0; // Honor: (left) Vulgar [-100,100] Famed (right) WFIFOL(fd,38)=0; // Virtue: (down) Wicked [-100,100] Righteous (up) WFIFOL(fd,42)=g->emblem_id; - safestrncpy(WFIFOP(fd,46),g->name, NAME_LENGTH); - safestrncpy(WFIFOP(fd,70),g->master, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,46),g->name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,70),g->master, NAME_LENGTH); safestrncpy((char*)WFIFOP(fd,94),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles" WFIFOL(fd,110) = 0; // zeny @@ -8160,7 +8160,7 @@ void clif_guild_allianceinfo(struct map_session_data *sd) if(a->guild_id>0){ WFIFOL(fd,c*32+4)=a->opposition; WFIFOL(fd,c*32+8)=a->guild_id; - safestrncpy(WFIFOP(fd,c*32+12),a->name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,c*32+12),a->name,NAME_LENGTH); c++; } } @@ -8205,7 +8205,7 @@ void clif_guild_memberlist(struct map_session_data *sd) WFIFOL(fd,c*104+26)=m->online; WFIFOL(fd,c*104+30)=m->position; memset(WFIFOP(fd,c*104+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty. - safestrncpy(WFIFOP(fd,c*104+84),m->name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,c*104+84),m->name,NAME_LENGTH); c++; } WFIFOW(fd, 2)=c*104+4; @@ -8229,7 +8229,7 @@ void clif_guild_positionnamelist(struct map_session_data *sd) WFIFOW(fd, 0)=0x166; for(i=0;iposition[i].name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,i*28+8),g->position[i].name,NAME_LENGTH); } WFIFOW(fd,2)=i*28+4; WFIFOSET(fd,WFIFOW(fd,2)); @@ -8291,7 +8291,7 @@ void clif_guild_positionchanged(struct guild *g,int idx) WBUFL(buf, 8)=g->position[idx].mode; WBUFL(buf,12)=idx; WBUFL(buf,16)=g->position[idx].exp_mode; - safestrncpy(WBUFP(buf,20),g->position[idx].name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,20),g->position[idx].name,NAME_LENGTH); // }* if( (sd=guild_getavailablesd(g))!=NULL ) clif_send(buf,WBUFW(buf,2),&sd->bl,GUILD); @@ -8437,7 +8437,7 @@ void clif_guild_invite(struct map_session_data *sd,struct guild *g) WFIFOHEAD(fd,packet_len(0x16a)); WFIFOW(fd,0)=0x16a; WFIFOL(fd,2)=g->guild_id; - safestrncpy(WFIFOP(fd,6),g->name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,6),g->name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x16a)); } @@ -8472,7 +8472,7 @@ void clif_guild_leave(struct map_session_data *sd,const char *name,const char *m nullpo_retv(sd); WBUFW(buf, 0)=0x15a; - safestrncpy(WBUFP(buf, 2),name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf, 2),name,NAME_LENGTH); memcpy(WBUFP(buf,26),mes,40); clif_send(buf,packet_len(0x15a),&sd->bl,GUILD_NOBG); } @@ -8531,7 +8531,7 @@ void clif_guild_expulsionlist(struct map_session_data* sd) if( e->account_id > 0 ) { - safestrncpy(WFIFOP(fd,4 + c*offset), e->name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,4 + c*offset), e->name, NAME_LENGTH); #if PACKETVER < 20100803 memset(WFIFOP(fd,4 + c*offset+24), 0, NAME_LENGTH); // account name (not used for security reasons) memcpy(WFIFOP(fd,4 + c*offset+48), e->mes, 40); @@ -8583,7 +8583,7 @@ void clif_guild_reqalliance(struct map_session_data *sd,uint32 account_id,const WFIFOHEAD(fd,packet_len(0x171)); WFIFOW(fd,0)=0x171; WFIFOL(fd,2)=account_id; - safestrncpy(WFIFOP(fd,6),name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,6),name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x171)); } @@ -8747,7 +8747,7 @@ void clif_callpartner(struct map_session_data *sd) const char *p = map_charid2nick(sd->status.partner_id); struct map_session_data *p_sd = pc_get_partner(sd); if( p != NULL && p_sd != NULL && !p_sd->state.autotrade ) - safestrncpy(WBUFP(buf,2), p, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,2), p, NAME_LENGTH); else WBUFB(buf,2) = 0; } else {// Send zero-length name if no partner, to initialize the client buffer. @@ -8785,7 +8785,7 @@ void clif_divorced(struct map_session_data* sd, const char* name) fd=sd->fd; WFIFOHEAD(fd,packet_len(0x205)); WFIFOW(fd,0)=0x205; - safestrncpy(WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); WFIFOSET(fd, packet_len(0x205)); } @@ -9265,11 +9265,11 @@ void clif_charnameack (int fd, struct block_list *bl) if( ssd->fakename[0] ) { WBUFW(buf, 0) = cmd = 0x195; - safestrncpy(WBUFP(buf,6), ssd->fakename, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ssd->fakename, NAME_LENGTH); WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0; break; } - safestrncpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ssd->status.name, NAME_LENGTH); if( ssd->status.party_id ) { p = party_search(ssd->status.party_id); @@ -9292,14 +9292,14 @@ void clif_charnameack (int fd, struct block_list *bl) WBUFW(buf, 0) = cmd = 0x195; if (p) - safestrncpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,30), p->party.name, NAME_LENGTH); else WBUFB(buf,30) = 0; if (g && ps >= 0 && ps < MAX_GUILDPOSITION) { - safestrncpy(WBUFP(buf,54), g->name,NAME_LENGTH); - safestrncpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,54), g->name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); } else { //Assume no guild. WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; @@ -9308,29 +9308,29 @@ void clif_charnameack (int fd, struct block_list *bl) break; //[blackhole89] case BL_HOM: - safestrncpy(WBUFP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH); break; case BL_MER: - safestrncpy(WBUFP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH); break; case BL_PET: - safestrncpy(WBUFP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH); break; case BL_NPC: - safestrncpy(WBUFP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH); break; case BL_MOB: { struct mob_data *md = (struct mob_data *)bl; nullpo_retv(md); - safestrncpy(WBUFP(buf,6), md->name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), md->name, NAME_LENGTH); if( md->guardian_data && md->guardian_data->guild_id ) { WBUFW(buf, 0) = cmd = 0x195; WBUFB(buf,30) = 0; - safestrncpy(WBUFP(buf,54), md->guardian_data->guild_name, NAME_LENGTH); - safestrncpy(WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,54), md->guardian_data->guild_name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH); } else if( battle_config.show_mob_info ) { @@ -9347,7 +9347,7 @@ void clif_charnameack (int fd, struct block_list *bl) if( str_p != mobhp ) { *(str_p-3) = '\0'; //Remove trailing space + pipe. - safestrncpy(WBUFP(buf,30), mobhp, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,30), mobhp, NAME_LENGTH); WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; } @@ -9359,7 +9359,7 @@ void clif_charnameack (int fd, struct block_list *bl) // break; return; case BL_ELEM: - safestrncpy(WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); break; default: ShowError("clif_charnameack: bad type %d(%d)\n", bl->type, bl->id); @@ -9394,7 +9394,7 @@ void clif_charnameupdate (struct map_session_data *ssd) WBUFW(buf,0) = cmd; WBUFL(buf,2) = ssd->bl.id; - safestrncpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), ssd->status.name, NAME_LENGTH); if (!battle_config.display_party_name) { if (ssd->status.party_id > 0 && ssd->status.guild_id > 0 && (g = ssd->guild) != NULL) @@ -9412,14 +9412,14 @@ void clif_charnameupdate (struct map_session_data *ssd) } if( p ) - safestrncpy(WBUFP(buf,30), p->party.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,30), p->party.name, NAME_LENGTH); else WBUFB(buf,30) = 0; if( g && ps >= 0 && ps < MAX_GUILDPOSITION ) { - safestrncpy(WBUFP(buf,54), g->name,NAME_LENGTH); - safestrncpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,54), g->name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); } else { @@ -12891,7 +12891,7 @@ void clif_PartyBookingSearchAck(int fd, struct party_booking_ad_info** results, { pb_ad = results[i]; WFIFOL(fd,i*size+5) = pb_ad->index; - safestrncpy(WFIFOP(fd,i*size+9),pb_ad->charname,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,i*size+9),pb_ad->charname,NAME_LENGTH); WFIFOL(fd,i*size+33) = pb_ad->starttime; // FIXME: This is expire time WFIFOW(fd,i*size+37) = pb_ad->p_detail.level; WFIFOW(fd,i*size+39) = pb_ad->p_detail.mapid; @@ -12955,7 +12955,7 @@ void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_boo WBUFW(buf,0) = 0x809; WBUFL(buf,2) = pb_ad->index; - safestrncpy(WBUFP(buf,6),pb_ad->charname,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6),pb_ad->charname,NAME_LENGTH); WBUFL(buf,30) = pb_ad->starttime; // FIXME: This is expire time WBUFW(buf,34) = pb_ad->p_detail.level; WBUFW(buf,36) = pb_ad->p_detail.mapid; @@ -14004,7 +14004,7 @@ void clif_PMIgnoreList(struct map_session_data* sd) WFIFOW(fd,0) = 0xd4; for( i = 0; i < ARRAYLENGTH(sd->ignore) && sd->ignore[i].name[0]; i++ ) { - safestrncpy(WFIFOP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH); } WFIFOW(fd,2) = 4+i*NAME_LENGTH; @@ -14119,7 +14119,7 @@ void clif_friendslist_send(struct map_session_data *sd) for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) { WFIFOL(fd, 4 + 32 * i + 0) = sd->status.friends[i].account_id; WFIFOL(fd, 4 + 32 * i + 4) = sd->status.friends[i].char_id; - safestrncpy(WFIFOP(fd, 4 + 32 * i + 8), sd->status.friends[i].name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 4 + 32 * i + 8), sd->status.friends[i].name, NAME_LENGTH); } if (i) { @@ -14153,7 +14153,7 @@ void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_dat if (f_sd) { WFIFOL(fd,4) = f_sd->status.account_id; WFIFOL(fd,8) = f_sd->status.char_id; - safestrncpy(WFIFOP(fd, 12), f_sd->status.name,NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 12), f_sd->status.name,NAME_LENGTH); } WFIFOSET(fd, packet_len(0x209)); } @@ -14169,7 +14169,7 @@ void clif_friendlist_req(struct map_session_data* sd, uint32 account_id, uint32 WFIFOW(fd,0) = 0x207; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = char_id; - safestrncpy(WFIFOP(fd,10), name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,10), name, NAME_LENGTH); WFIFOSET(fd,packet_len(0x207)); } @@ -14451,15 +14451,15 @@ void clif_alchemist(struct map_session_data* sd) if (strcmp(chemist_fame_list[i].name, "-") == 0 && (name = map_charid2nick(chemist_fame_list[i].id)) != NULL) { - safestrncpy(WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); } else - safestrncpy(WFIFOP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH); } else - safestrncpy(WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = chemist_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - safestrncpy(WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = 0; } @@ -14504,15 +14504,15 @@ void clif_taekwon(struct map_session_data* sd) if (strcmp(taekwon_fame_list[i].name, "-") == 0 && (name = map_charid2nick(taekwon_fame_list[i].id)) != NULL) { - safestrncpy(WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); } else - safestrncpy(WFIFOP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH); } else - safestrncpy(WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = taekwon_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - safestrncpy(WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = 0; } WFIFOSET(fd, packet_len(0x226)); @@ -14550,7 +14550,7 @@ void clif_ranking_pk(struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0x238)); WFIFOW(fd,0) = 0x238; for(i=0;i<10;i++){ - safestrncpy(WFIFOP(fd,i*24+2), "Unknown", NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,i*24+2), "Unknown", NAME_LENGTH); WFIFOL(fd,i*4+242) = 0; } WFIFOSET(fd, packet_len(0x238)); @@ -14927,7 +14927,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd) WFIFOL(fd,8+73*j) = msg->id; memcpy(WFIFOP(fd,12+73*j), msg->title, MAIL_TITLE_LENGTH); WFIFOB(fd,52+73*j) = (msg->status != MAIL_UNREAD); - safestrncpy(WFIFOP(fd,53+73*j), msg->send_name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,53+73*j), msg->send_name, NAME_LENGTH); WFIFOL(fd,77+73*j) = (uint32)msg->timestamp; j++; } @@ -15786,7 +15786,7 @@ void clif_Adopt_request(struct map_session_data *sd, struct map_session_data *sr WFIFOW(fd,0) = 0x1f6; WFIFOL(fd,2) = src->status.account_id; WFIFOL(fd,6) = p_id; - safestrncpy(WFIFOP(fd,10), src->status.name, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd,10), src->status.name, NAME_LENGTH); WFIFOSET(fd,34); } @@ -16034,7 +16034,7 @@ void clif_quest_send_mission(struct map_session_data *sd) WFIFOL(fd, i*104+22+j*30) = qi->objectives[j].mob; WFIFOW(fd, i*104+26+j*30) = sd->quest_log[i].count[j]; mob = mob_db(qi->objectives[j].mob); - safestrncpy(WFIFOP(fd, i*104+28+j*30), mob->jname, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, i*104+28+j*30), mob->jname, NAME_LENGTH); } } @@ -16063,7 +16063,7 @@ void clif_quest_add(struct map_session_data *sd, struct quest *qd) WFIFOL(fd, i*30+17) = qi->objectives[i].mob; WFIFOW(fd, i*30+21) = qd->count[i]; mob = mob_db(qi->objectives[i].mob); - safestrncpy(WFIFOP(fd, i*30+23), mob->jname, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, i*30+23), mob->jname, NAME_LENGTH); } WFIFOSET(fd, packet_len(0x2b3)); @@ -16394,7 +16394,7 @@ void clif_bg_hp(struct map_session_data *sd) { WBUFW(buf,0) = cmd; WBUFL(buf,2) = sd->status.account_id; #if PACKETVER < 20140613 - safestrncpy(WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); if( sd->battle_status.max_hp > INT16_MAX ) { // To correctly display the %hp bar. [Skotlex] WBUFW(buf,30) = sd->battle_status.hp/(sd->battle_status.max_hp/100); WBUFW(buf,32) = 100; @@ -16424,7 +16424,7 @@ void clif_bg_xy(struct map_session_data *sd) WBUFW(buf,0)=0x2df; WBUFL(buf,2)=sd->status.account_id; - safestrncpy(WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); WBUFW(buf,30)=sd->status.class_; WBUFW(buf,32)=sd->bl.x; WBUFW(buf,34)=sd->bl.y; @@ -16462,7 +16462,7 @@ void clif_bg_message(struct battleground_data *bg, int src_id, const char *name, WBUFW(buf,0) = 0x2dc; WBUFW(buf,2) = len + NAME_LENGTH + 8; WBUFL(buf,4) = src_id; - safestrncpy(WBUFP(buf,8), name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,8), name, NAME_LENGTH); memcpy(WBUFP(buf,32), mes, len); clif_send(buf,WBUFW(buf,2), &sd->bl, BG); diff --git a/src/map/npc.c b/src/map/npc.c index b005f4c4cf..c4da18d04a 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -44,7 +44,7 @@ static int npc_cache_mob=0; #if PACKETVER >= 20131223 struct s_npc_market { struct npc_item_list *list; - char exname[NAME_LENGTH+1]; + char exname[NPC_NAME_LENGTH+1]; uint16 count; }; static DBMap *NPCMarketDB; /// Stock persistency! Temporary market stocks from `market` table. struct s_npc_market, key: NPC exname @@ -3401,7 +3401,7 @@ static void npc_market_fromsql(void) { if (!(market = (struct s_npc_market *)strdb_get(NPCMarketDB,data))) { CREATE(market, struct s_npc_market, 1); market->count = 0; - safestrncpy(market->exname, data, strlen(data)+1); + safestrncpy(market->exname, data, NPC_NAME_LENGTH); strdb_put(NPCMarketDB, market->exname, market); } From 09cb81d98ed652f7f88e96ef90976776d10a9d65 Mon Sep 17 00:00:00 2001 From: Jittapan Pluemsumran Date: Fri, 14 Oct 2016 19:38:15 +0700 Subject: [PATCH 06/67] Added a sample for utilizing the random option system. --- doc/sample/randomopt.txt | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 doc/sample/randomopt.txt diff --git a/doc/sample/randomopt.txt b/doc/sample/randomopt.txt new file mode 100644 index 0000000000..c8f3019c51 --- /dev/null +++ b/doc/sample/randomopt.txt @@ -0,0 +1,54 @@ +//===== rAthena Script ======================================= +//= Sample Random Option Script +//===== Description: ========================================= +//= Enchant a weapon with a random element option +//= to a weapon with no random option. +//===== Changelogs: ========================================== +//= 1.0 First version. [Secretdataz] +//============================================================ + +prontera,162,195,4 script Elemental Master 1_M_WIZARD,{ + disable_items; + mes "[Elemental Master]"; + mes "I could enchant your weapon with an element."; + mes "Are you interested?"; + next; + if(select("Yes, I'm interested in that.") == 1){ + .@id = getequipid(EQI_HAND_R); + for(.@i = 0; .@i < .sz; ++.@i){ + if(.@id == .alloweditems[.@i]) + .@allowed = 1; + } + mes "[Elemental Master]"; + if(.@id == -1) { + mes "You are not holding anything in your hand."; + close; + } else if(!.@allowed){ + mes "Your item can't be enchanted."; + close; + } else if(getequiprandomoption(EQI_HAND_R,0,ROA_ID)){ + mes "Your weapon has already been enchanted."; + close; + } + mes "Do you want to enchant your " + getitemname(.@id) + " with a random element?"; + next; + if(select("Yes, proceed.") == 1){ + mes "[Elemental Master]"; + mes "*mumble mumble*"; + progressbar "#00FF00",2; + next; + setrandomoption(EQI_HAND_R,0,RDMOPT_WEAPON_ATTR_NOTHING + rand(10),0,0); + mes "[Elemental Master]"; + mes "Here's your weapon"; + close; + } + close; + } + else{ + close; + } + +OnInit: + setarray .alloweditems[0],1201,1202; // Add more item ids here + .sz = getarraysize(.alloweditems); +} From 48c43cf92f77afaebd7924f59556f90f4a98be2a Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Sun, 16 Oct 2016 12:58:03 +0200 Subject: [PATCH 07/67] Refactored clif_charnameack Added support for ZC_ACK_REQNAMEALL2 which is used from 2015-05-13 and higher Added packet documentation for ZC_ACCEPT_ENTER3 Fixed some visual effects not being resent when using `@refresh`. Thanks to @Grantea --- src/map/clif.c | 73 ++++++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index 9ed69928a1..b29237b108 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -645,6 +645,7 @@ int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target /// Notifies the client, that it's connection attempt was accepted. /// 0073 .L .3B .B .B (ZC_ACCEPT_ENTER) /// 02eb .L .3B .B .B .W (ZC_ACCEPT_ENTER2) +/// 0a18 .L .3B .B .B .W .B (ZC_ACCEPT_ENTER3) void clif_authok(struct map_session_data *sd) { #if PACKETVER < 20080102 @@ -9221,6 +9222,7 @@ void clif_refresh(struct map_session_data *sd) clif_clearunit_single(sd->bl.id,CLR_DEAD,sd->fd); else clif_changed_dir(&sd->bl, SELF); + clif_efst_status_change_sub(sd,&sd->bl,SELF); // unlike vending, resuming buyingstore crashes the client. buyingstore_close(sd); @@ -9240,9 +9242,10 @@ void clif_refresh(struct map_session_data *sd) /// Updates the object's (bl) name on client. /// 0095 .L .24B (ZC_ACK_REQNAME) /// 0195 .L .24B .24B .24B .24B (ZC_ACK_REQNAMEALL) +/// 0a30 .L .24B .24B .24B .24B .L (ZC_ACK_REQNAMEALL2) void clif_charnameack (int fd, struct block_list *bl) { - unsigned char buf[103]; + unsigned char buf[106]; int cmd = 0x95; nullpo_retv(bl); @@ -9254,56 +9257,56 @@ void clif_charnameack (int fd, struct block_list *bl) { case BL_PC: { - struct map_session_data *ssd = (struct map_session_data *)bl; + struct map_session_data *sd = (struct map_session_data *)bl; struct party_data *p = NULL; - struct guild *g = NULL; - int ps = -1; + +#if PACKETVER >= 20150513 + WBUFW(buf, 0) = cmd = 0xa30; +#else + WBUFW(buf, 0) = cmd = 0x195; +#endif //Requesting your own "shadow" name. [Skotlex] - if (ssd->fd == fd && ssd->disguise) + if( sd->fd == fd && sd->disguise ){ WBUFL(buf,2) = -bl->id; + } - if( ssd->fakename[0] ) { - WBUFW(buf, 0) = cmd = 0x195; - safestrncpy((char*)WBUFP(buf,6), ssd->fakename, NAME_LENGTH); + if( sd->fakename[0] ) { + safestrncpy((char*)WBUFP(buf,6), sd->fakename, NAME_LENGTH); WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0; +#if PACKETVER >= 20150513 + WBUFL(buf,102) = 0; // Title ID +#endif break; } - safestrncpy((char*)WBUFP(buf,6), ssd->status.name, NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); - if( ssd->status.party_id ) { - p = party_search(ssd->status.party_id); - } - if( ssd->status.guild_id ) { - if( ( g = ssd->guild ) != NULL ) { - int i; - - ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id); - if( i < g->max_member ) ps = g->member[i].position; - } + if( sd->status.party_id ){ + p = party_search(sd->status.party_id); } - if( !battle_config.display_party_name && g == NULL ) {// do not display party unless the player is also in a guild - p = NULL; - } - - if (p == NULL && g == NULL) - break; - - WBUFW(buf, 0) = cmd = 0x195; - if (p) + // do not display party unless the player is also in a guild + if( p && ( sd->guild || battle_config.display_party_name ) ){ safestrncpy((char*)WBUFP(buf,30), p->party.name, NAME_LENGTH); - else + }else{ WBUFB(buf,30) = 0; + } - if (g && ps >= 0 && ps < MAX_GUILDPOSITION) - { - safestrncpy((char*)WBUFP(buf,54), g->name,NAME_LENGTH); - safestrncpy((char*)WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); - } else { //Assume no guild. + if( sd->guild ){ + int i; + + ARR_FIND(0, sd->guild->max_member, i, sd->guild->member[i].account_id == sd->status.account_id && sd->guild->member[i].char_id == sd->status.char_id); + + safestrncpy((char*)WBUFP(buf,54), sd->guild->name,NAME_LENGTH); + safestrncpy((char*)WBUFP(buf,78), sd->guild->position[i].name, NAME_LENGTH); + }else{ //Assume no guild. WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; } + +#if PACKETVER >= 20150513 + WBUFL(buf,102) = 0; // Title ID +#endif } break; //[blackhole89] @@ -19221,7 +19224,7 @@ void packetdb_readdb(bool reload) #endif -1, 0, 0, 26, 0, 0, 0, 0, 14, 2, 23, 2, -1, 2, 3, 2, 21, 3, 5, 0, 66, 0, 0, 8, 3, 0, 0, -1, 0, -1, 0, 0, - 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 106, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; struct { void (*func)(int, struct map_session_data *); From 57131f286c2f7e69f0a73b555cbbb3ec2a09a102 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Sun, 16 Oct 2016 14:20:17 +0200 Subject: [PATCH 08/67] Fixed some compile warnings Fixes #1623 Thanks to @lelouch22 --- src/map/atcommand.c | 4 ++-- src/map/clif.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/map/atcommand.c b/src/map/atcommand.c index b837410d0c..2b73803d8c 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -9577,10 +9577,10 @@ ACMD_FUNC(vip) { ACMD_FUNC(showrate) { nullpo_retr(-1,sd); if (!sd->vip.disableshowrate) { - sprintf(atcmd_output,msg_txt(sd,718)); //Personal rate information is not displayed now. + safestrncpy(atcmd_output,msg_txt(sd,718),CHAT_SIZE_MAX); //Personal rate information is not displayed now. sd->vip.disableshowrate = 1; } else { - sprintf(atcmd_output,msg_txt(sd,719)); //Personal rate information will be shown. + safestrncpy(atcmd_output,msg_txt(sd,719),CHAT_SIZE_MAX); //Personal rate information will be shown. sd->vip.disableshowrate = 0; } clif_displaymessage(fd,atcmd_output); diff --git a/src/map/clif.c b/src/map/clif.c index b29237b108..0404932680 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -15984,7 +15984,7 @@ void clif_quest_send_list(struct map_session_data *sd) offset += 2; WFIFOW(fd, offset) = qi->objectives[j].count; offset += 2; - safestrncpy(WFIFOP(fd, offset), mob->jname, NAME_LENGTH); + safestrncpy((char*)WFIFOP(fd, offset), mob->jname, NAME_LENGTH); offset += NAME_LENGTH; } } From 568262faf47f6726cd041765dcd94220699bd59a Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Sun, 16 Oct 2016 23:07:28 +0200 Subject: [PATCH 09/67] Added latest npc constants Also added some mob placeholders --- db/const.txt | 3 +++ db/re/mob_db.txt | 62 ++++++++++++++++++++++++++++++++++++++++++++++-- src/map/npc.h | 2 +- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/db/const.txt b/db/const.txt index e288d2419e..1e1fd70d61 100644 --- a/db/const.txt +++ b/db/const.txt @@ -2723,3 +2723,6 @@ THANATOS_KEEP 10009 4_F_REBELLION2 10201 4_F_REBELLION3 10202 4_M_ILYA 10203 +4_ELDER 10205 +4_LUNATIC 10206 +4_F_NOVICE2 10207 diff --git a/db/re/mob_db.txt b/db/re/mob_db.txt index b68c4369bd..e59185d123 100644 --- a/db/re/mob_db.txt +++ b/db/re/mob_db.txt @@ -2774,7 +2774,7 @@ //3617,V_G_GERTIE_ //3618,V_G_ALPHOCCIO_ //3619,V_G_TRENTINI_ -// +//3620,NYANGPORING //3621,EP16_2_MM_CUTIE //3622,EP16_2_MM_S_GUARDS //3623,EP16_2_MM_U_ENERGY_R @@ -2809,7 +2809,7 @@ //3652,MD_ZOMBIE_120 //3653,MD_ZOMBIE_140 //3654,MD_ZOMBIE_160 -// +//3655,E_MOBSTER //3656,B_THE_PAPER //3657,B_THE_PAPER2 //3658,MD_LICH_LORD_100 @@ -2823,6 +2823,58 @@ //3666,MD_DRAINLIAR_100 //3667,MD_DRAINLIAR_160 //3668,B_KIEL_ +//3669,DIABOLIC2 +//3670,DELETER_2 +//3671,JP_MAZEMOB_01 +//3672,JP_MAZEMOB_02 +//3673,JP_MAZEMOB_03 +//3674,JP_MAZEMOB_04 +//3675,JP_MAZEMOB_05 +//3676,JP_MAZEMOB_06 +//3677,JP_MAZEMOB_07 +//3678,JP_MAZEMOB_08 +//3679,JP_MAZEMOB_09 +//3680,JP_MAZEMOB_10 +//3681,JP_MAZEMOB_11 +//3682,JP_MAZEMOB_12 +//3683,JP_MAZEMOB_13 +//3684,JP_MAZEMOB_14 +//3685,JP_MAZEMOB_15 +//3686,JP_MAZEMOB_16 +//3687,JP_MAZEMOB_17 +//3688,JP_MAZEMOB_18 +//3689,JP_MAZEMOB_19 +//3690,JP_MAZEMOB_20 +//3691,JP_MAZEMOB_21 +//3692,JP_MAZEMOB_22 +//3693,JP_MAZEMOB_23 +//3694,JP_MAZEMOB_24 +//3695,JP_MAZEMOB_25 +//3696,JP_MAZEMOB_26 +//3697,JP_MAZEMOB_27 +//3698,JP_MAZEMOB_28 +//3699,JP_MAZEMOB_29 +//3700,JP_MAZEMOB_30 +//3701,JP_MAZEMOB_31 +//3702,JP_MAZEMOB_32 +//3703,JP_MAZEMOB_33 +//3704,JP_MAZEMOB_34 +//3705,JP_MAZEMOB_35 +//3706,JP_MAZEMOB_36 +//3707,JP_MAZEMOB_37 +//3708,JP_MAZEMOB_38 +//3709,JP_MAZEMOB_39 +//3710,JP_MAZEMOB_40 +//3711,JP_MAZEMOB_41 +//3712,JP_MAZEMOB_42 +//3713,JP_MAZEMOB_43 +//3714,JP_MAZEMOB_44 +//3715,JP_MAZEMOB_45 +//3716,JP_MAZEMOB_46 +//3717,JP_MAZEMOB_47 +//3718,JP_MAZEMOB_48 +//3719,JP_MAZEMOB_49 +//3720,JP_MAZEMOB_50 //3721,QE_PORING //3722,QE_POPORING //3723,QE_DROPS @@ -2832,3 +2884,9 @@ //3727,QE_PICKY_ //3728,QE_ZOMBIE //3729,QE_POISON_SPORE +//3730,BIG_DIPPER +//3731,SCATLETON +//3732,JP_ABYSS_BOSS_1 +//3733,JP_ABYSS_BOSS_2 +//3734,ORC_X2016 +//3735,PORING_X2016 diff --git a/src/map/npc.h b/src/map/npc.h index 097d87db9c..3aaf4c2e71 100644 --- a/src/map/npc.h +++ b/src/map/npc.h @@ -108,7 +108,7 @@ enum actor_classes #define MAX_NPC_CLASS 1000 // New NPC range #define MAX_NPC_CLASS2_START 10000 -#define MAX_NPC_CLASS2_END 10203 +#define MAX_NPC_CLASS2_END 10208 //Checks if a given id is a valid npc id. [Skotlex] //Since new npcs are added all the time, the max valid value is the one before the first mob (Scorpion = 1001) From a0c7d6e2fecb8b65c9b04d493ea70e374bd51c2d Mon Sep 17 00:00:00 2001 From: rAthenaAPI <administrator@rathena.org> Date: Sun, 16 Oct 2016 23:07:52 +0200 Subject: [PATCH 10/67] SQL synchronization --- sql-files/mob_db_re.sql | 62 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/sql-files/mob_db_re.sql b/sql-files/mob_db_re.sql index 5b639ee510..0468601e59 100644 --- a/sql-files/mob_db_re.sql +++ b/sql-files/mob_db_re.sql @@ -2840,7 +2840,7 @@ REPLACE INTO `mob_db_re` VALUES (3246,'V_B_TRENTINI','Wanderer Trentini','Wander #3617,V_G_GERTIE_ #3618,V_G_ALPHOCCIO_ #3619,V_G_TRENTINI_ -# +#3620,NYANGPORING #3621,EP16_2_MM_CUTIE #3622,EP16_2_MM_S_GUARDS #3623,EP16_2_MM_U_ENERGY_R @@ -2875,7 +2875,7 @@ REPLACE INTO `mob_db_re` VALUES (3246,'V_B_TRENTINI','Wanderer Trentini','Wander #3652,MD_ZOMBIE_120 #3653,MD_ZOMBIE_140 #3654,MD_ZOMBIE_160 -# +#3655,E_MOBSTER #3656,B_THE_PAPER #3657,B_THE_PAPER2 #3658,MD_LICH_LORD_100 @@ -2889,6 +2889,58 @@ REPLACE INTO `mob_db_re` VALUES (3246,'V_B_TRENTINI','Wanderer Trentini','Wander #3666,MD_DRAINLIAR_100 #3667,MD_DRAINLIAR_160 #3668,B_KIEL_ +#3669,DIABOLIC2 +#3670,DELETER_2 +#3671,JP_MAZEMOB_01 +#3672,JP_MAZEMOB_02 +#3673,JP_MAZEMOB_03 +#3674,JP_MAZEMOB_04 +#3675,JP_MAZEMOB_05 +#3676,JP_MAZEMOB_06 +#3677,JP_MAZEMOB_07 +#3678,JP_MAZEMOB_08 +#3679,JP_MAZEMOB_09 +#3680,JP_MAZEMOB_10 +#3681,JP_MAZEMOB_11 +#3682,JP_MAZEMOB_12 +#3683,JP_MAZEMOB_13 +#3684,JP_MAZEMOB_14 +#3685,JP_MAZEMOB_15 +#3686,JP_MAZEMOB_16 +#3687,JP_MAZEMOB_17 +#3688,JP_MAZEMOB_18 +#3689,JP_MAZEMOB_19 +#3690,JP_MAZEMOB_20 +#3691,JP_MAZEMOB_21 +#3692,JP_MAZEMOB_22 +#3693,JP_MAZEMOB_23 +#3694,JP_MAZEMOB_24 +#3695,JP_MAZEMOB_25 +#3696,JP_MAZEMOB_26 +#3697,JP_MAZEMOB_27 +#3698,JP_MAZEMOB_28 +#3699,JP_MAZEMOB_29 +#3700,JP_MAZEMOB_30 +#3701,JP_MAZEMOB_31 +#3702,JP_MAZEMOB_32 +#3703,JP_MAZEMOB_33 +#3704,JP_MAZEMOB_34 +#3705,JP_MAZEMOB_35 +#3706,JP_MAZEMOB_36 +#3707,JP_MAZEMOB_37 +#3708,JP_MAZEMOB_38 +#3709,JP_MAZEMOB_39 +#3710,JP_MAZEMOB_40 +#3711,JP_MAZEMOB_41 +#3712,JP_MAZEMOB_42 +#3713,JP_MAZEMOB_43 +#3714,JP_MAZEMOB_44 +#3715,JP_MAZEMOB_45 +#3716,JP_MAZEMOB_46 +#3717,JP_MAZEMOB_47 +#3718,JP_MAZEMOB_48 +#3719,JP_MAZEMOB_49 +#3720,JP_MAZEMOB_50 #3721,QE_PORING #3722,QE_POPORING #3723,QE_DROPS @@ -2898,4 +2950,10 @@ REPLACE INTO `mob_db_re` VALUES (3246,'V_B_TRENTINI','Wanderer Trentini','Wander #3727,QE_PICKY_ #3728,QE_ZOMBIE #3729,QE_POISON_SPORE +#3730,BIG_DIPPER +#3731,SCATLETON +#3732,JP_ABYSS_BOSS_1 +#3733,JP_ABYSS_BOSS_2 +#3734,ORC_X2016 +#3735,PORING_X2016 From 55c5627eefaa2c9f11cc35d25abdd2732b0d7c8b Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Mon, 17 Oct 2016 13:53:04 +0200 Subject: [PATCH 11/67] Fixed compilation warning in pre-re Fixes #1627 Thanks to @keitenai --- src/map/battle.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/map/battle.c b/src/map/battle.c index 4909bb2ccf..6428e1fcb1 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4344,7 +4344,6 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s struct map_session_data *sd = BL_CAST(BL_PC, src); struct status_change *sc = status_get_sc(src); struct status_data *sstatus = status_get_status_data(src); - struct status_data *tstatus = status_get_status_data(target); int inf3 = skill_get_inf3(skill_id); // Kagerou/Oboro Earth Charm effect +15% wATK @@ -4369,6 +4368,8 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s if (sc->data[SC_MADNESSCANCEL]) ATK_ADD(wd.equipAtk, wd.equipAtk2, 100); if (sc->data[SC_GATLINGFEVER]) { + struct status_data *tstatus = status_get_status_data(target); + if (tstatus->size == SZ_SMALL) { ATK_ADD(wd.equipAtk, wd.equipAtk2, 10 * sc->data[SC_GATLINGFEVER]->val1); } else if (tstatus->size == SZ_MEDIUM) { From 031adff9257d8719283696b337ad31e953a78e4e Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Thu, 13 Oct 2016 13:04:39 -0400 Subject: [PATCH 12/67] Updated Ranger Traps behavior * Fixes #1611. * Magenta, Cobalt, Maize, and Verdure Traps should permanently change the element of the target. --- db/pre-re/skill_cast_db.txt | 8 ++++---- db/re/skill_cast_db.txt | 8 ++++---- src/map/skill.c | 8 ++++++-- src/map/status.c | 4 ---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index 47d68a0ace..cff936e7ff 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1248,13 +1248,13 @@ //-- RA_CAMOUFLAGE 2247,0,0,0,10000,0,0 //-- RA_MAGENTATRAP -2249,0,2000,0,15000,10000,0 +2249,0,2000,0,15000,0,0 //-- RA_COBALTTRAP -2250,0,2000,0,15000,10000,0 +2250,0,2000,0,15000,0,0 //-- RA_MAIZETRAP -2251,0,2000,0,15000,10000,0 +2251,0,2000,0,15000,0,0 //-- RA_VERDURETRAP -2252,0,2000,0,15000,10000,0 +2252,0,2000,0,15000,0,0 //-- RA_FIRINGTRAP 2253,0,0,0,15000,15000,0 //-- RA_ICEBOUNDTRAP diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index ba3ae28ffa..686db6649f 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1264,13 +1264,13 @@ //-- RA_CAMOUFLAGE 2247,0,0,0,10000,0,0,-1 //-- RA_MAGENTATRAP -2249,0,2000,0,15000,10000,0,-1 +2249,0,2000,0,15000,0,0,-1 //-- RA_COBALTTRAP -2250,0,2000,0,15000,10000,0,-1 +2250,0,2000,0,15000,0,0,-1 //-- RA_MAIZETRAP -2251,0,2000,0,15000,10000,0,-1 +2251,0,2000,0,15000,0,0,-1 //-- RA_VERDURETRAP -2252,0,2000,0,15000,10000,0,-1 +2252,0,2000,0,15000,0,0,-1 //-- RA_FIRINGTRAP 2253,0,0,0,15000,15000,0,-1 //-- RA_ICEBOUNDTRAP diff --git a/src/map/skill.c b/src/map/skill.c index 7ae677fe8a..fbe9f51b1a 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -17279,8 +17279,12 @@ static int skill_trap_splash(struct block_list *bl, va_list ap) case UNT_COBALTTRAP: case UNT_MAIZETRAP: case UNT_VERDURETRAP: - if( bl->type != BL_PC && status_get_class_(bl) != CLASS_BOSS ) - sc_start2(ss,bl,SC_ELEMENTALCHANGE,100,sg->skill_lv,skill_get_ele(sg->skill_id,sg->skill_lv),skill_get_time2(sg->skill_id,sg->skill_lv)); + if( bl->type == BL_MOB && status_get_class_(bl) != CLASS_BOSS ) { + struct status_data *status = status_get_status_data(bl); + + status->def_ele = skill_get_ele(sg->skill_id, sg->skill_lv); + status->ele_lv = (unsigned char)sg->skill_lv; + } break; case UNT_REVERBERATION: // For proper skill delay animation when used with Dominion Impulse skill_addtimerskill(ss, tick + status_get_amotion(ss), bl->id, 0, 0, WM_REVERBERATION_MELEE, sg->skill_lv, BF_WEAPON, 0); diff --git a/src/map/status.c b/src/map/status.c index e493e3e3eb..883c65aa08 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -667,10 +667,6 @@ void initChangeTables(void) set_sc( RA_WUGDASH , SC_WUGDASH , SI_WUGDASH , SCB_SPEED|SCB_DSPD ); set_sc( RA_WUGBITE , SC_BITE , SI_WUGBITE , SCB_NONE ); set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_SPEED|SCB_DEF|SCB_DEF2 ); - add_sc( RA_MAGENTATRAP , SC_ELEMENTALCHANGE ); - add_sc( RA_COBALTTRAP , SC_ELEMENTALCHANGE ); - add_sc( RA_MAIZETRAP , SC_ELEMENTALCHANGE ); - add_sc( RA_VERDURETRAP , SC_ELEMENTALCHANGE ); set_sc( RA_FIRINGTRAP , SC_BURNING , SI_BURNT , SCB_MDEF ); set_sc_with_vfx( RA_ICEBOUNDTRAP, SC_FREEZING , SI_FROSTMISTY , SCB_SPEED|SCB_ASPD|SCB_DEF|SCB_DEF2 ); set_sc( RA_UNLIMIT , SC_UNLIMIT , SI_UNLIMIT , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2 ); From 56c9765fe0128babbcb3f64d2ebb61b95f878527 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Tue, 18 Oct 2016 22:49:18 +0200 Subject: [PATCH 13/67] Fixed a wrong close in the eye of hellion quest Merges HerculesWS/Hercules@d8441a3 Thanks to @Ridley8819 --- npc/quests/eye_of_hellion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt index 56482d4f6e..73334e72aa 100644 --- a/npc/quests/eye_of_hellion.txt +++ b/npc/quests/eye_of_hellion.txt @@ -418,7 +418,7 @@ morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{ mes "for yourself?! I must smite"; mes "you now before you are"; mes "consumed by its darkness!"; - close; + close2; percentheal -100,0; end; } From 73eb96f35889268d14c3fa2d8d2dc01615d00928 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Tue, 18 Oct 2016 23:35:21 +0200 Subject: [PATCH 14/67] Introducing charpointer macros for fifo/buffers (#1624) * Introducing charpointer macros for fifo/buffers --- src/char/char.c | 2 +- src/char/char_clif.c | 24 +-- src/char/char_logif.c | 14 +- src/char/char_mapif.c | 12 +- src/char/int_auction.c | 2 +- src/char/int_guild.c | 16 +- src/char/int_homun.c | 4 +- src/char/int_party.c | 6 +- src/char/int_pet.c | 2 +- src/char/inter.c | 22 +-- src/common/socket.h | 4 + src/login/account.c | 10 +- src/login/loginchrif.c | 26 +-- src/login/loginclif.c | 18 +- src/map/battle.c | 8 +- src/map/chrif.c | 12 +- src/map/clif.c | 376 ++++++++++++++++++++--------------------- src/map/intif.c | 72 ++++---- 18 files changed, 317 insertions(+), 313 deletions(-) diff --git a/src/char/char.c b/src/char/char.c index dc8e338679..fd1b156667 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1891,7 +1891,7 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p) WBUFW(buf,106) = ( p->rename > 0 ) ? 0 : 1; offset += 2; #if (PACKETVER >= 20100720 && PACKETVER <= 20100727) || PACKETVER >= 20100803 - mapindex_getmapname_ext(mapindex_id2name(p->last_point.map), (char*)WBUFP(buf,108)); + mapindex_getmapname_ext(mapindex_id2name(p->last_point.map), WBUFCP(buf,108)); offset += MAP_NAME_LENGTH_EXT; #endif #if PACKETVER >= 20100803 diff --git a/src/char/char_clif.c b/src/char/char_clif.c index d7f0373444..280571f544 100644 --- a/src/char/char_clif.c +++ b/src/char/char_clif.c @@ -152,7 +152,7 @@ int chclif_parse_pincode_check( int fd, struct char_session_data* sd ){ return 1; memset(pin,0,PINCODE_LENGTH+1); - strncpy((char*)pin, (char*)RFIFOP(fd, 6), PINCODE_LENGTH); + strncpy((char*)pin, RFIFOCP(fd, 6), PINCODE_LENGTH); RFIFOSKIP(fd,10); char_pincode_decrypt(sd->pincode_seed, pin ); @@ -246,8 +246,8 @@ int chclif_parse_pincode_change( int fd, struct char_session_data* sd ){ memset(oldpin,0,PINCODE_LENGTH+1); memset(newpin,0,PINCODE_LENGTH+1); - strncpy(oldpin, (char*)RFIFOP(fd,6), PINCODE_LENGTH); - strncpy(newpin, (char*)RFIFOP(fd,10), PINCODE_LENGTH); + strncpy(oldpin, RFIFOCP(fd,6), PINCODE_LENGTH); + strncpy(newpin, RFIFOCP(fd,10), PINCODE_LENGTH); RFIFOSKIP(fd,14); char_pincode_decrypt(sd->pincode_seed,oldpin); @@ -280,7 +280,7 @@ int chclif_parse_pincode_setnew( int fd, struct char_session_data* sd ){ else { char newpin[PINCODE_LENGTH+1]; memset(newpin,0,PINCODE_LENGTH+1); - strncpy( newpin, (char*)RFIFOP(fd,6), PINCODE_LENGTH ); + strncpy( newpin, RFIFOCP(fd,6), PINCODE_LENGTH ); RFIFOSKIP(fd,10); char_pincode_decrypt( sd->pincode_seed, newpin ); @@ -674,8 +674,8 @@ int chclif_parse_maplogin(int fd){ return 0; else { int i; - char* l_user = (char*)RFIFOP(fd,2); - char* l_pass = (char*)RFIFOP(fd,26); + char* l_user = RFIFOCP(fd,2); + char* l_pass = RFIFOCP(fd,26); l_user[23] = '\0'; l_pass[23] = '\0'; ARR_FIND( 0, ARRAYLENGTH(map_server), i, map_server[i].fd <= 0 ); @@ -906,7 +906,7 @@ int chclif_parse_charselect(int fd, struct char_session_data* sd,uint32 ipl){ WFIFOHEAD(fd,28); WFIFOW(fd,0) = 0x71; WFIFOL(fd,2) = cd->char_id; - mapindex_getmapname_ext(mapindex_id2name(cd->last_point.map), (char*)WFIFOP(fd,6)); + mapindex_getmapname_ext(mapindex_id2name(cd->last_point.map), WFIFOCP(fd,6)); subnet_map_ip = char_lan_subnetcheck(ipl); // Advanced subnet check [LuzZza] WFIFOL(fd,22) = htonl((subnet_map_ip) ? subnet_map_ip : map_server[i].ip); WFIFOW(fd,26) = ntows(htons(map_server[i].port)); // [!] LE byte order here [!] @@ -943,13 +943,13 @@ int chclif_parse_createnewchar(int fd, struct char_session_data* sd,int cmd){ i = -2; else { #if PACKETVER >= 20151001 - i = char_make_new_char_sql(sd, (char*)RFIFOP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29),RFIFOW(fd,31),RFIFOW(fd,32),RFIFOB(fd,35)); + i = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29),RFIFOW(fd,31),RFIFOW(fd,32),RFIFOB(fd,35)); RFIFOSKIP(fd,36); #elif PACKETVER >= 20120307 - i = char_make_new_char_sql(sd, (char*)RFIFOP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29)); + i = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29)); RFIFOSKIP(fd,31); #else - i = char_make_new_char_sql(sd, (char*)RFIFOP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27),RFIFOB(fd,28),RFIFOB(fd,29),RFIFOB(fd,30),RFIFOB(fd,31),RFIFOB(fd,32),RFIFOW(fd,33),RFIFOW(fd,35)); + i = char_make_new_char_sql(sd, RFIFOCP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27),RFIFOB(fd,28),RFIFOB(fd,29),RFIFOB(fd,30),RFIFOB(fd,31),RFIFOB(fd,32),RFIFOW(fd,33),RFIFOW(fd,35)); RFIFOSKIP(fd,37); #endif } @@ -1067,7 +1067,7 @@ int chclif_parse_reqrename(int fd, struct char_session_data* sd, int cmd){ if(cmd == 0x8fc){ FIFOSD_CHECK(30) cid =RFIFOL(fd,2); - safestrncpy(name, (char *)RFIFOP(fd,6), NAME_LENGTH); + safestrncpy(name, RFIFOCP(fd,6), NAME_LENGTH); RFIFOSKIP(fd,30); } else if(cmd == 0x28d) { @@ -1075,7 +1075,7 @@ int chclif_parse_reqrename(int fd, struct char_session_data* sd, int cmd){ FIFOSD_CHECK(34); aid = RFIFOL(fd,2); cid =RFIFOL(fd,6); - safestrncpy(name, (char *)RFIFOP(fd,10), NAME_LENGTH); + safestrncpy(name, RFIFOCP(fd,10), NAME_LENGTH); RFIFOSKIP(fd,34); if( aid != sd->account_id ) return 1; diff --git a/src/char/char_logif.c b/src/char/char_logif.c index 97a8ab852c..50f03ed630 100644 --- a/src/char/char_logif.c +++ b/src/char/char_logif.c @@ -37,7 +37,7 @@ void chlogif_pincode_notifyLoginPinUpdate( uint32 account_id, char* pin ){ WFIFOW(login_fd,0) = 0x2738; WFIFOW(login_fd,2) = size; WFIFOL(login_fd,4) = account_id; - strncpy( (char*)WFIFOP(login_fd,8), pin, PINCODE_LENGTH+1 ); + strncpy( WFIFOCP(login_fd,8), pin, PINCODE_LENGTH+1 ); WFIFOSET(login_fd,size); } } @@ -188,7 +188,7 @@ void chlogif_send_global_accreg(const char *key, unsigned int index, intptr_t va WFIFOB(login_fd, nlen) = (unsigned char)len; // won't be higher; the column size is 32 nlen += 1; - safestrncpy((char*)WFIFOP(login_fd,nlen), key, len); + safestrncpy(WFIFOCP(login_fd,nlen), key, len); nlen += len; WFIFOL(login_fd, nlen) = index; @@ -205,7 +205,7 @@ void chlogif_send_global_accreg(const char *key, unsigned int index, intptr_t va WFIFOB(login_fd, nlen) = (unsigned char)len; // won't be higher; the column size is 254 nlen += 1; - safestrncpy((char*)WFIFOP(login_fd,nlen), sval, len); + safestrncpy(WFIFOCP(login_fd,nlen), sval, len); nlen += len; } } else { @@ -355,8 +355,8 @@ int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd){ sd->char_slots = MAX_CHARS;/* cap to maximum */ } else if ( !sd->char_slots )/* no value aka 0 in sql */ sd->char_slots = MIN_CHARS;/* cap to minimum */ - safestrncpy(sd->birthdate, (const char*)RFIFOP(fd,52), sizeof(sd->birthdate)); - safestrncpy(sd->pincode, (const char*)RFIFOP(fd,63), sizeof(sd->pincode)); + safestrncpy(sd->birthdate, RFIFOCP(fd,52), sizeof(sd->birthdate)); + safestrncpy(sd->pincode, RFIFOCP(fd,63), sizeof(sd->pincode)); sd->pincode_change = (time_t)RFIFOL(fd,68); sd->isvip = RFIFOB(fd,72); sd->chars_vip = RFIFOB(fd,73); @@ -694,8 +694,8 @@ int chlogif_parse_AccInfoAck(int fd) { } type>>=1; mapif_accinfo_ack(true, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), type, RFIFOL(fd,19), RFIFOL(fd,23), RFIFOL(fd,27), - (char*)RFIFOP(fd,31), (char*)RFIFOP(fd,71), (char*)RFIFOP(fd,87), (char*)RFIFOP(fd,111), - (char*)RFIFOP(fd,122), (char*)RFIFOP(fd,155), (char*)RFIFOP(fd,155+PINCODE_LENGTH)); + RFIFOCP(fd,31), RFIFOCP(fd,71), RFIFOCP(fd,87), RFIFOCP(fd,111), + RFIFOCP(fd,122), RFIFOCP(fd,155), RFIFOCP(fd,155+PINCODE_LENGTH)); RFIFOSKIP(fd,155+PINCODE_LENGTH+NAME_LENGTH); } return 1; diff --git a/src/char/char_mapif.c b/src/char/char_mapif.c index b6ee3b2a61..def745b656 100644 --- a/src/char/char_mapif.c +++ b/src/char/char_mapif.c @@ -697,7 +697,7 @@ int chmapif_parse_reqcharname(int fd){ WFIFOHEAD(fd,30); WFIFOW(fd,0) = 0x2b09; WFIFOL(fd,2) = RFIFOL(fd,2); - char_loadName((int)RFIFOL(fd,2), (char*)WFIFOP(fd,6)); + char_loadName((int)RFIFOL(fd,2), WFIFOCP(fd,6)); WFIFOSET(fd,30); RFIFOSKIP(fd,6); @@ -736,7 +736,7 @@ int chmapif_parse_fwlog_changestatus(int fd){ char esc_name[NAME_LENGTH*2+1]; char answer = true; int aid = RFIFOL(fd,2); // account_id of who ask (-1 if server itself made this request) - const char* name = (char*)RFIFOP(fd,6); // name of the target character + const char* name = RFIFOCP(fd,6); // name of the target character int operation = RFIFOW(fd,30); // type of operation @see enum chrif_req_op int32 timediff = 0; int val1 = 0, sex = SEX_MALE; @@ -825,7 +825,7 @@ int chmapif_parse_fwlog_changestatus(int fd){ WFIFOHEAD(fd,34); WFIFOW(fd, 0) = 0x2b0f; WFIFOL(fd, 2) = aid; - safestrncpy((char*)WFIFOP(fd,6), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6), name, NAME_LENGTH); WFIFOW(fd,30) = operation; WFIFOW(fd,32) = result; WFIFOSET(fd,34); @@ -1133,7 +1133,7 @@ int chmapif_parse_fw_configstats(int fd){ session[sfd]->flag.server = 1;/* to ensure we won't drop our own packet */ WFIFOHEAD(sfd, RFIFOW(fd,2) ); - memcpy((char*)WFIFOP(sfd,0), (char*)RFIFOP(fd, 0), RFIFOW(fd,2)); + memcpy(WFIFOCP(sfd,0), RFIFOCP(fd, 0), RFIFOW(fd,2)); WFIFOSET(sfd, RFIFOW(fd,2) ); flush_fifo(sfd); do_close(sfd); @@ -1225,7 +1225,7 @@ int chmapif_parse_reqcharban(int fd){ else { //int aid = RFIFOL(fd,2); aid of player who as requested the ban int timediff = RFIFOL(fd,6); - const char* name = (char*)RFIFOP(fd,10); // name of the target character + const char* name = RFIFOCP(fd,10); // name of the target character RFIFOSKIP(fd,10+NAME_LENGTH); if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id`,`char_id`,`unban_time` FROM `%s` WHERE `name` = '%s'", schema_config.char_db, name) ) @@ -1290,7 +1290,7 @@ int chmapif_parse_reqcharunban(int fd){ if (RFIFOREST(fd) < 6+NAME_LENGTH) return 0; else { - const char* name = (char*)RFIFOP(fd,6); + const char* name = RFIFOCP(fd,6); RFIFOSKIP(fd,6+NAME_LENGTH); if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `unban_time` = '0' WHERE `name` = '%s' LIMIT 1", schema_config.char_db, name) ) { diff --git a/src/char/int_auction.c b/src/char/int_auction.c index 358a1da7c2..fee7c4f7a8 100644 --- a/src/char/int_auction.c +++ b/src/char/int_auction.c @@ -467,7 +467,7 @@ static void mapif_parse_Auction_bid(int fd) } auction->buyer_id = char_id; - safestrncpy(auction->buyer_name, (char*)RFIFOP(fd,16), NAME_LENGTH); + safestrncpy(auction->buyer_name, RFIFOCP(fd,16), NAME_LENGTH); auction->price = bid; if( bid >= auction->buynow ) diff --git a/src/char/int_guild.c b/src/char/int_guild.c index 35b0cff069..6ad64ec0b4 100644 --- a/src/char/int_guild.c +++ b/src/char/int_guild.c @@ -1844,21 +1844,21 @@ int inter_guild_parse_frommap(int fd) { RFIFOHEAD(fd); switch(RFIFOW(fd,0)) { - case 0x3030: mapif_parse_CreateGuild(fd,RFIFOL(fd,4),(char*)RFIFOP(fd,8),(struct guild_member *)RFIFOP(fd,32)); break; + case 0x3030: mapif_parse_CreateGuild(fd,RFIFOL(fd,4),RFIFOCP(fd,8),(struct guild_member *)RFIFOP(fd,32)); break; case 0x3031: mapif_parse_GuildInfo(fd,RFIFOL(fd,2)); break; case 0x3032: mapif_parse_GuildAddMember(fd,RFIFOL(fd,4),(struct guild_member *)RFIFOP(fd,8)); break; - case 0x3033: mapif_parse_GuildMasterChange(fd,RFIFOL(fd,4),(const char*)RFIFOP(fd,8),RFIFOW(fd,2)-8); break; - case 0x3034: mapif_parse_GuildLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),(const char*)RFIFOP(fd,15)); break; + case 0x3033: mapif_parse_GuildMasterChange(fd,RFIFOL(fd,4),RFIFOCP(fd,8),RFIFOW(fd,2)-8); break; + case 0x3034: mapif_parse_GuildLeave(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOCP(fd,15)); break; case 0x3035: mapif_parse_GuildChangeMemberInfoShort(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17)); break; case 0x3036: mapif_parse_BreakGuild(fd,RFIFOL(fd,2)); break; - case 0x3037: mapif_parse_GuildMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),(char*)RFIFOP(fd,12),RFIFOW(fd,2)-12); break; - case 0x3039: mapif_parse_GuildBasicInfoChange(fd,RFIFOL(fd,4),RFIFOW(fd,8),(const char*)RFIFOP(fd,10),RFIFOW(fd,2)-10); break; - case 0x303A: mapif_parse_GuildMemberInfoChange(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOL(fd,12),RFIFOW(fd,16),(const char*)RFIFOP(fd,18),RFIFOW(fd,2)-18); break; + case 0x3037: mapif_parse_GuildMessage(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOCP(fd,12),RFIFOW(fd,2)-12); break; + case 0x3039: mapif_parse_GuildBasicInfoChange(fd,RFIFOL(fd,4),RFIFOW(fd,8),RFIFOCP(fd,10),RFIFOW(fd,2)-10); break; + case 0x303A: mapif_parse_GuildMemberInfoChange(fd,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOL(fd,12),RFIFOW(fd,16),RFIFOCP(fd,18),RFIFOW(fd,2)-18); break; case 0x303B: mapif_parse_GuildPosition(fd,RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12)); break; case 0x303C: mapif_parse_GuildSkillUp(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14)); break; case 0x303D: mapif_parse_GuildAlliance(fd,RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18)); break; - case 0x303E: mapif_parse_GuildNotice(fd,RFIFOL(fd,2),(const char*)RFIFOP(fd,6),(const char*)RFIFOP(fd,66)); break; - case 0x303F: mapif_parse_GuildEmblem(fd,RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8),(const char*)RFIFOP(fd,12)); break; + case 0x303E: mapif_parse_GuildNotice(fd,RFIFOL(fd,2),RFIFOCP(fd,6),RFIFOCP(fd,66)); break; + case 0x303F: mapif_parse_GuildEmblem(fd,RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8),RFIFOCP(fd,12)); break; case 0x3040: mapif_parse_GuildCastleDataLoad(fd,RFIFOW(fd,2),(int *)RFIFOP(fd,4)); break; case 0x3041: mapif_parse_GuildCastleDataSave(fd,RFIFOW(fd,2),RFIFOB(fd,4),RFIFOL(fd,5)); break; diff --git a/src/char/int_homun.c b/src/char/int_homun.c index 7167b2a391..d9cb851a84 100644 --- a/src/char/int_homun.c +++ b/src/char/int_homun.c @@ -76,7 +76,7 @@ static void mapif_homunculus_renamed(int fd, uint32 account_id, uint32 char_id, WFIFOL(fd, 2) = account_id; WFIFOL(fd, 6) = char_id; WFIFOB(fd,10) = flag; - safestrncpy((char*)WFIFOP(fd,11), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,11), name, NAME_LENGTH); WFIFOSET(fd, NAME_LENGTH+12); } @@ -305,7 +305,7 @@ int inter_homunculus_parse_frommap(int fd) case 0x3091: mapif_parse_homunculus_load (fd, (int)RFIFOL(fd,2), (int)RFIFOL(fd,6)); break; case 0x3092: mapif_parse_homunculus_save (fd, (int)RFIFOW(fd,2), (int)RFIFOL(fd,4), (struct s_homunculus*)RFIFOP(fd,8)); break; case 0x3093: mapif_parse_homunculus_delete(fd, (int)RFIFOL(fd,2)); break; - case 0x3094: mapif_parse_homunculus_rename(fd, (int)RFIFOL(fd,2), (int)RFIFOL(fd,6), (char*)RFIFOP(fd,10)); break; + case 0x3094: mapif_parse_homunculus_rename(fd, (int)RFIFOL(fd,2), (int)RFIFOL(fd,6), RFIFOCP(fd,10)); break; default: return 0; } diff --git a/src/char/int_party.c b/src/char/int_party.c index 914691779a..1ba64e8a45 100644 --- a/src/char/int_party.c +++ b/src/char/int_party.c @@ -774,14 +774,14 @@ int inter_party_parse_frommap(int fd) { RFIFOHEAD(fd); switch(RFIFOW(fd,0)) { - case 0x3020: mapif_parse_CreateParty(fd, (char*)RFIFOP(fd,4), RFIFOB(fd,28), RFIFOB(fd,29), (struct party_member*)RFIFOP(fd,30)); break; + case 0x3020: mapif_parse_CreateParty(fd, RFIFOCP(fd,4), RFIFOB(fd,28), RFIFOB(fd,29), (struct party_member*)RFIFOP(fd,30)); break; case 0x3021: mapif_parse_PartyInfo(fd, RFIFOL(fd,2), RFIFOL(fd,6)); break; case 0x3022: mapif_parse_PartyAddMember(fd, RFIFOL(fd,4), (struct party_member*)RFIFOP(fd,8)); break; case 0x3023: mapif_parse_PartyChangeOption(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOW(fd,10), RFIFOW(fd,12)); break; - case 0x3024: mapif_parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), (char *)RFIFOP(fd,14), (enum e_party_member_withdraw)RFIFOB(fd,14+NAME_LENGTH)); break; + case 0x3024: mapif_parse_PartyLeave(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOCP(fd,14), (enum e_party_member_withdraw)RFIFOB(fd,14+NAME_LENGTH)); break; case 0x3025: mapif_parse_PartyChangeMap(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOW(fd,14), RFIFOB(fd,16), RFIFOW(fd,17)); break; case 0x3026: mapif_parse_BreakParty(fd, RFIFOL(fd,2)); break; - case 0x3027: mapif_parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), (char*)RFIFOP(fd,12), RFIFOW(fd,2)-12); break; + case 0x3027: mapif_parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), RFIFOCP(fd,12), RFIFOW(fd,2)-12); break; case 0x3029: mapif_parse_PartyLeaderChange(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break; case 0x302A: mapif_parse_PartyShareLevel(fd, RFIFOL(fd,2)); break; default: diff --git a/src/char/int_pet.c b/src/char/int_pet.c index 5586ed5335..3303a72e24 100644 --- a/src/char/int_pet.c +++ b/src/char/int_pet.c @@ -271,7 +271,7 @@ int mapif_delete_pet(int fd, int pet_id){ int mapif_parse_CreatePet(int fd){ RFIFOHEAD(fd); mapif_create_pet(fd, RFIFOL(fd, 2), RFIFOL(fd, 6), RFIFOW(fd, 10), RFIFOW(fd, 12), RFIFOW(fd, 14), RFIFOW(fd, 16), RFIFOW(fd, 18), - RFIFOW(fd, 20), RFIFOB(fd, 22), RFIFOB(fd, 23), (char*)RFIFOP(fd, 24)); + RFIFOW(fd, 20), RFIFOB(fd, 22), RFIFOB(fd, 23), RFIFOCP(fd, 24)); return 0; } diff --git a/src/char/inter.c b/src/char/inter.c index c529f666de..a16a8eb978 100644 --- a/src/char/inter.c +++ b/src/char/inter.c @@ -370,7 +370,7 @@ void inter_to_fd(int fd, int u_fd, int aid, char* msg, ...) { WFIFOW(fd,2) = 12 + (unsigned short)len; WFIFOL(fd,4) = u_fd; WFIFOL(fd,8) = aid; - safestrncpy((char*)WFIFOP(fd,12), msg_out, len); + safestrncpy(WFIFOCP(fd,12), msg_out, len); WFIFOSET(fd,12 + len); @@ -389,7 +389,7 @@ static void mapif_acc_info_ack(int fd, int u_fd, int acc_id, const char* acc_nam WFIFOW(fd,0) = 0x3808; WFIFOL(fd,2) = u_fd; WFIFOL(fd,6) = acc_id; - safestrncpy((char*)WFIFOP(fd,10),acc_name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,10),acc_name,NAME_LENGTH); WFIFOSET(fd,10 + NAME_LENGTH); } @@ -405,7 +405,7 @@ void mapif_parse_accinfo(int fd) { int account_id = 0; char *data; - safestrncpy(query, (char*) RFIFOP(fd,15), NAME_LENGTH); + safestrncpy(query, RFIFOCP(fd,15), NAME_LENGTH); Sql_EscapeString(sql_handle, query_esq, query); account_id = atoi(query); @@ -614,7 +614,7 @@ int inter_accreg_fromsql(uint32 account_id, uint32 char_id, int fd, int type) WFIFOB(fd, plen) = (unsigned char)len; // won't be higher; the column size is 32 plen += 1; - safestrncpy((char*)WFIFOP(fd,plen), data, len); + safestrncpy(WFIFOCP(fd,plen), data, len); plen += len; Sql_GetData(sql_handle, 1, &data, NULL); @@ -628,7 +628,7 @@ int inter_accreg_fromsql(uint32 account_id, uint32 char_id, int fd, int type) WFIFOB(fd, plen) = (unsigned char)len; // won't be higher; the column size is 254 plen += 1; - safestrncpy((char*)WFIFOP(fd,plen), data, len); + safestrncpy(WFIFOCP(fd,plen), data, len); plen += len; WFIFOW(fd, 14) += 1; @@ -694,7 +694,7 @@ int inter_accreg_fromsql(uint32 account_id, uint32 char_id, int fd, int type) WFIFOB(fd, plen) = (unsigned char)len;/* won't be higher; the column size is 32 */ plen += 1; - safestrncpy((char*)WFIFOP(fd,plen), data, len); + safestrncpy(WFIFOCP(fd,plen), data, len); plen += len; Sql_GetData(sql_handle, 1, &data, NULL); @@ -1023,7 +1023,7 @@ int mapif_parse_WisRequest(int fd) return 0; } - safestrncpy(name, (char*)RFIFOP(fd,28), NAME_LENGTH); //Received name may be too large and not contain \0! [Skotlex] + safestrncpy(name, RFIFOCP(fd,28), NAME_LENGTH); //Received name may be too large and not contain \0! [Skotlex] Sql_EscapeStringLen(sql_handle, esc_name, name, strnlen(name, NAME_LENGTH)); if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `name` FROM `%s` WHERE `name`='%s'", schema_config.char_db, esc_name) ) @@ -1045,7 +1045,7 @@ int mapif_parse_WisRequest(int fd) memset(name, 0, NAME_LENGTH); memcpy(name, data, zmin(len, NAME_LENGTH)); // if source is destination, don't ask other servers. - if( strncmp((const char*)RFIFOP(fd,4), name, NAME_LENGTH) == 0 ) + if( strncmp(RFIFOCP(fd,4), name, NAME_LENGTH) == 0 ) { uint8 buf[27]; WBUFW(buf, 0) = 0x3802; @@ -1126,7 +1126,7 @@ int mapif_parse_Registry(int fd) for(i = 0; i < count; i++) { unsigned int index; - safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(key, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; index = RFIFOL(fd, cursor); @@ -1143,7 +1143,7 @@ int mapif_parse_Registry(int fd) break; // str case 2: - safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(sval, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; inter_savereg(account_id,char_id,key,index,(intptr_t)sval,true); break; @@ -1197,7 +1197,7 @@ int mapif_parse_NameChangeRequest(int fd) account_id = RFIFOL(fd,2); char_id = RFIFOL(fd,6); type = RFIFOB(fd,10); - name = (char*)RFIFOP(fd,11); + name = RFIFOCP(fd,11); // Check Authorised letters/symbols in the name if (charserv_config.char_config.char_name_option == 1) { // only letters/symbols in char_name_letters are authorised diff --git a/src/common/socket.h b/src/common/socket.h index 3fa62ecd23..d1344dc984 100644 --- a/src/common/socket.h +++ b/src/common/socket.h @@ -25,6 +25,8 @@ #define RFIFOP(fd,pos) (session[fd]->rdata + session[fd]->rdata_pos + (pos)) #define WFIFOP(fd,pos) (session[fd]->wdata + session[fd]->wdata_size + (pos)) +#define RFIFOCP(fd,pos) ((char*)RFIFOP(fd,pos)) +#define WFIFOCP(fd,pos) ((char*)WFIFOP(fd,pos)) #define RFIFOB(fd,pos) (*(uint8*)RFIFOP(fd,pos)) #define WFIFOB(fd,pos) (*(uint8*)WFIFOP(fd,pos)) #define RFIFOW(fd,pos) (*(uint16*)RFIFOP(fd,pos)) @@ -50,12 +52,14 @@ // buffer I/O macros #define RBUFP(p,pos) (((uint8*)(p)) + (pos)) +#define RBUFCP(p,pos) ((char*)RBUFP((p),(pos))) #define RBUFB(p,pos) (*(uint8*)RBUFP((p),(pos))) #define RBUFW(p,pos) (*(uint16*)RBUFP((p),(pos))) #define RBUFL(p,pos) (*(uint32*)RBUFP((p),(pos))) #define RBUFQ(p,pos) (*(uint64*)RBUFP((p),(pos))) #define WBUFP(p,pos) (((uint8*)(p)) + (pos)) +#define WBUFCP(p,pos) ((char*)WBUFP((p),(pos))) #define WBUFB(p,pos) (*(uint8*)WBUFP((p),(pos))) #define WBUFW(p,pos) (*(uint16*)WBUFP((p),(pos))) #define WBUFL(p,pos) (*(uint32*)WBUFP((p),(pos))) diff --git a/src/login/account.c b/src/login/account.c index 1b3b172c3d..5cad60b2ab 100644 --- a/src/login/account.c +++ b/src/login/account.c @@ -661,7 +661,7 @@ void mmo_save_global_accreg(AccountDB* self, int fd, int account_id, int char_id for (i = 0; i < count; i++) { unsigned int index; - safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(key, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; index = RFIFOL(fd, cursor); @@ -680,7 +680,7 @@ void mmo_save_global_accreg(AccountDB* self, int fd, int account_id, int char_id break; // str case 2: - safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(sval, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; if( SQL_ERROR == Sql_Query(sql_handle, "REPLACE INTO `%s` (`account_id`,`key`,`index`,`value`) VALUES ('%d','%s','%u','%s')", db->global_acc_reg_str_table, account_id, key, index, sval) ) Sql_ShowDebug(sql_handle); @@ -730,7 +730,7 @@ void mmo_send_global_accreg(AccountDB* self, int fd, int account_id, int char_id WFIFOB(fd, plen) = (unsigned char)len; // won't be higher; the column size is 32 plen += 1; - safestrncpy((char*)WFIFOP(fd,plen), data, len); + safestrncpy(WFIFOCP(fd,plen), data, len); plen += len; Sql_GetData(sql_handle, 1, &data, NULL); @@ -744,7 +744,7 @@ void mmo_send_global_accreg(AccountDB* self, int fd, int account_id, int char_id WFIFOB(fd, plen) = (unsigned char)len; // won't be higher; the column size is 254 plen += 1; - safestrncpy((char*)WFIFOP(fd,plen), data, len); + safestrncpy(WFIFOCP(fd,plen), data, len); plen += len; WFIFOW(fd, 14) += 1; @@ -797,7 +797,7 @@ void mmo_send_global_accreg(AccountDB* self, int fd, int account_id, int char_id WFIFOB(fd, plen) = (unsigned char)len; // won't be higher; the column size is 32 plen += 1; - safestrncpy((char*)WFIFOP(fd,plen), data, len); + safestrncpy(WFIFOCP(fd,plen), data, len); plen += len; Sql_GetData(sql_handle, 1, &data, NULL); diff --git a/src/login/loginchrif.c b/src/login/loginchrif.c index a64a69ef88..3ef53ff289 100644 --- a/src/login/loginchrif.c +++ b/src/login/loginchrif.c @@ -190,12 +190,12 @@ int logchrif_send_accdata(int fd, uint32 aid) { WFIFOHEAD(fd,75); WFIFOW(fd,0) = 0x2717; WFIFOL(fd,2) = aid; - safestrncpy((char*)WFIFOP(fd,6), email, 40); + safestrncpy(WFIFOCP(fd,6), email, 40); WFIFOL(fd,46) = (uint32)expiration_time; WFIFOB(fd,50) = (unsigned char)group_id; WFIFOB(fd,51) = char_slots; - safestrncpy((char*)WFIFOP(fd,52), birthdate, 10+1); - safestrncpy((char*)WFIFOP(fd,63), pincode, 4+1 ); + safestrncpy(WFIFOCP(fd,52), birthdate, 10+1); + safestrncpy(WFIFOCP(fd,63), pincode, 4+1 ); WFIFOL(fd,68) = (uint32)acc.pincode_change; WFIFOB(fd,72) = isvip; WFIFOB(fd,73) = char_vip; @@ -276,8 +276,8 @@ int logchrif_parse_reqchangemail(int fd, int id, char* ip){ char new_email[40]; uint32 account_id = RFIFOL(fd,2); - safestrncpy(actual_email, (char*)RFIFOP(fd,6), 40); - safestrncpy(new_email, (char*)RFIFOP(fd,46), 40); + safestrncpy(actual_email, RFIFOCP(fd,6), 40); + safestrncpy(new_email, RFIFOCP(fd,46), 40); RFIFOSKIP(fd, 86); if( e_mail_check(actual_email) == 0 ) @@ -612,7 +612,7 @@ int logchrif_parse_updpincode(int fd){ AccountDB* accounts = login_get_accounts_db(); if( accounts->load_num(accounts, &acc, RFIFOL(fd,4) ) ){ - strncpy( acc.pincode, (char*)RFIFOP(fd,8), PINCODE_LENGTH+1 ); + strncpy( acc.pincode, RFIFOCP(fd,8), PINCODE_LENGTH+1 ); acc.pincode_change = time( NULL ); accounts->save(accounts, &acc); } @@ -736,19 +736,19 @@ int logchrif_parse_accinfo(int fd) { WFIFOL(fd, 19) = acc.group_id; WFIFOL(fd, 23) = acc.logincount; WFIFOL(fd, 27) = acc.state; - safestrncpy((char*)WFIFOP(fd, 31), acc.email, 40); - safestrncpy((char*)WFIFOP(fd, 71), acc.last_ip, 16); - safestrncpy((char*)WFIFOP(fd, 87), acc.lastlogin, 24); - safestrncpy((char*)WFIFOP(fd, 111), acc.birthdate, 11); + safestrncpy(WFIFOCP(fd, 31), acc.email, 40); + safestrncpy(WFIFOCP(fd, 71), acc.last_ip, 16); + safestrncpy(WFIFOCP(fd, 87), acc.lastlogin, 24); + safestrncpy(WFIFOCP(fd, 111), acc.birthdate, 11); if ((unsigned int)u_group >= acc.group_id) { - safestrncpy((char*)WFIFOP(fd, 122), acc.pass, 33); - safestrncpy((char*)WFIFOP(fd, 155), acc.pincode, PINCODE_LENGTH); + safestrncpy(WFIFOCP(fd, 122), acc.pass, 33); + safestrncpy(WFIFOCP(fd, 155), acc.pincode, PINCODE_LENGTH); } else { memset(WFIFOP(fd, 122), '\0', 33); memset(WFIFOP(fd, 155), '\0', PINCODE_LENGTH); } - safestrncpy((char*)WFIFOP(fd, 155 + PINCODE_LENGTH), acc.userid, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 155 + PINCODE_LENGTH), acc.userid, NAME_LENGTH); WFIFOSET(fd, len); } else { diff --git a/src/login/loginclif.c b/src/login/loginclif.c index 52c52bc93a..3ad5dd0023 100644 --- a/src/login/loginclif.c +++ b/src/login/loginclif.c @@ -211,7 +211,7 @@ static void logclif_auth_failed(struct login_session_data* sd, int result) { struct mmo_account acc; AccountDB* accounts = login_get_accounts_db(); time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; - timestamp2string((char*)WFIFOP(fd,6), 20, unban_time, login_config.date_format); + timestamp2string(WFIFOCP(fd,6), 20, unban_time, login_config.date_format); } WFIFOSET(fd,26); } @@ -226,7 +226,7 @@ static void logclif_auth_failed(struct login_session_data* sd, int result) { struct mmo_account acc; AccountDB* accounts = login_get_accounts_db(); time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; - timestamp2string((char*)WFIFOP(fd,3), 20, unban_time, login_config.date_format); + timestamp2string(WFIFOCP(fd,3), 20, unban_time, login_config.date_format); } WFIFOSET(fd,23); } @@ -299,8 +299,8 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm // Shinryo: For the time being, just use token as password. if(command == 0x0825) { - char *accname = (char *)RFIFOP(fd, 9); - char *token = (char *)RFIFOP(fd, 0x5C); + char *accname = RFIFOCP(fd, 9); + char *token = RFIFOCP(fd, 0x5C); size_t uAccLen = strlen(accname); size_t uTokenLen = RFIFOREST(fd) - 0x5C; @@ -319,10 +319,10 @@ static int logclif_parse_reqauth(int fd, struct login_session_data *sd, int comm else { version = RFIFOL(fd,2); - safestrncpy(username, (const char*)RFIFOP(fd,6), NAME_LENGTH); + safestrncpy(username, RFIFOCP(fd,6), NAME_LENGTH); if( israwpass ) { - safestrncpy(password, (const char*)RFIFOP(fd,30), PASSWD_LENGTH); + safestrncpy(password, RFIFOCP(fd,30), PASSWD_LENGTH); clienttype = RFIFOB(fd,54); } else @@ -409,15 +409,15 @@ static int logclif_parse_reqcharconnec(int fd, struct login_session_data *sd, ch uint16 type; uint16 new_; - safestrncpy(sd->userid, (char*)RFIFOP(fd,2), NAME_LENGTH); - safestrncpy(sd->passwd, (char*)RFIFOP(fd,26), NAME_LENGTH); + safestrncpy(sd->userid, RFIFOCP(fd,2), NAME_LENGTH); + safestrncpy(sd->passwd, RFIFOCP(fd,26), NAME_LENGTH); if( login_config.use_md5_passwds ) MD5_String(sd->passwd, sd->passwd); sd->passwdenc = 0; sd->version = login_config.client_version_to_connect; // hack to skip version check server_ip = ntohl(RFIFOL(fd,54)); server_port = ntohs(RFIFOW(fd,58)); - safestrncpy(server_name, (char*)RFIFOP(fd,60), 20); + safestrncpy(server_name, RFIFOCP(fd,60), 20); type = RFIFOW(fd,82); new_ = RFIFOW(fd,84); RFIFOSKIP(fd,86); diff --git a/src/map/battle.c b/src/map/battle.c index 6428e1fcb1..0d0a010e6c 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -8459,9 +8459,9 @@ void rAthena_report(char* date, char *time_c) { WBUFW(buf,2) = 6 + 12 + 9 + 24 + 4 + 4 + 4 + 4 + ( bd_size * ( BFLAG_LENGTH + 4 ) ); WBUFW(buf,4) = 0x9c; - safestrncpy((char*)WBUFP(buf,6), date, 12); - safestrncpy((char*)WBUFP(buf,6 + 12), time_c, 9); - safestrncpy((char*)WBUFP(buf,6 + 12 + 9), timestring, 24); + safestrncpy(WBUFCP(buf,6), date, 12); + safestrncpy(WBUFCP(buf,6 + 12), time_c, 9); + safestrncpy(WBUFCP(buf,6 + 12 + 9), timestring, 24); WBUFL(buf,6 + 12 + 9 + 24) = rev; WBUFL(buf,6 + 12 + 9 + 24 + 4) = map_getusers(); @@ -8470,7 +8470,7 @@ void rAthena_report(char* date, char *time_c) { WBUFL(buf,6 + 12 + 9 + 24 + 4 + 4 + 4) = bd_size; for( i = 0; i < bd_size; i++ ) { - safestrncpy((char*)WBUFP(buf,6 + 12 + 9+ 24 + 4 + 4 + 4 + 4 + ( i * ( BFLAG_LENGTH + 4 ) ) ), battle_data[i].str, 35); + safestrncpy(WBUFCP(buf,6 + 12 + 9+ 24 + 4 + 4 + 4 + 4 + ( i * ( BFLAG_LENGTH + 4 ) ) ), battle_data[i].str, 35); WBUFL(buf,6 + 12 + 9 + 24 + 4 + 4 + 4 + 4 + BFLAG_LENGTH + ( i * ( BFLAG_LENGTH + 4 ) ) ) = *battle_data[i].val; } diff --git a/src/map/chrif.c b/src/map/chrif.c index f26d136e11..0f55c8a83b 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -861,7 +861,7 @@ int chrif_req_login_operation(int aid, const char* character_name, enum chrif_re WFIFOHEAD(char_fd,44); WFIFOW(char_fd,0) = 0x2b0e; WFIFOL(char_fd,2) = aid; - safestrncpy((char*)WFIFOP(char_fd,6), character_name, NAME_LENGTH); + safestrncpy(WFIFOCP(char_fd,6), character_name, NAME_LENGTH); WFIFOW(char_fd,30) = operation_type; if ( operation_type == CHRIF_OP_LOGIN_BAN || operation_type == CHRIF_OP_LOGIN_VIP) @@ -883,7 +883,7 @@ int chrif_changesex(struct map_session_data *sd, bool change_account) { WFIFOHEAD(char_fd,44); WFIFOW(char_fd,0) = 0x2b0e; WFIFOL(char_fd,2) = sd->status.account_id; - safestrncpy((char*)WFIFOP(char_fd,6), sd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(char_fd,6), sd->status.name, NAME_LENGTH); WFIFOW(char_fd,30) = (change_account ? CHRIF_OP_LOGIN_CHANGESEX : CHRIF_OP_CHANGECHARSEX); if (!change_account) WFIFOB(char_fd,32) = sd->status.sex == SEX_MALE ? SEX_FEMALE : SEX_MALE; @@ -1131,7 +1131,7 @@ int chrif_req_charban(int aid, const char* character_name, int32 timediff){ WFIFOW(char_fd,0) = 0x2b28; WFIFOL(char_fd,2) = aid; WFIFOL(char_fd,6) = timediff; - safestrncpy((char*)WFIFOP(char_fd,10), character_name, NAME_LENGTH); + safestrncpy(WFIFOCP(char_fd,10), character_name, NAME_LENGTH); WFIFOSET(char_fd,10+NAME_LENGTH); //default 34 return 0; } @@ -1142,7 +1142,7 @@ int chrif_req_charunban(int aid, const char* character_name){ WFIFOHEAD(char_fd,6+NAME_LENGTH); WFIFOW(char_fd,0) = 0x2b2a; WFIFOL(char_fd,2) = aid; - safestrncpy((char*)WFIFOP(char_fd,6), character_name, NAME_LENGTH); + safestrncpy(WFIFOCP(char_fd,6), character_name, NAME_LENGTH); WFIFOSET(char_fd,6+NAME_LENGTH); return 0; } @@ -1805,10 +1805,10 @@ int chrif_parse(int fd) { case 0x2b03: clif_charselectok(RFIFOL(fd,2), RFIFOB(fd,6)); break; case 0x2b04: chrif_recvmap(fd); break; case 0x2b06: chrif_changemapserverack(RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), RFIFOW(fd,18), RFIFOW(fd,20), RFIFOW(fd,22), RFIFOL(fd,24), RFIFOW(fd,28)); break; - case 0x2b09: map_addnickdb(RFIFOL(fd,2), (char*)RFIFOP(fd,6)); break; + case 0x2b09: map_addnickdb(RFIFOL(fd,2), RFIFOCP(fd,6)); break; case 0x2b0b: chrif_skillcooldown_load(fd); break; case 0x2b0d: chrif_changedsex(fd); break; - case 0x2b0f: chrif_ack_login_req(RFIFOL(fd,2), (char*)RFIFOP(fd,6), RFIFOW(fd,30), RFIFOW(fd,32)); break; + case 0x2b0f: chrif_ack_login_req(RFIFOL(fd,2), RFIFOCP(fd,6), RFIFOW(fd,30), RFIFOW(fd,32)); break; case 0x2b12: chrif_divorceack(RFIFOL(fd,2), RFIFOL(fd,6)); break; case 0x2b14: chrif_ban(fd); break; case 0x2b1b: chrif_recvfamelist(fd); break; diff --git a/src/map/clif.c b/src/map/clif.c index 0404932680..466a56eb70 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1130,9 +1130,9 @@ static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool #endif #if PACKETVER >= 20091103 #if PACKETVER >= 20120221 - safestrncpy((char*)WBUFP(buf,64), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,64), name, NAME_LENGTH); #else - safestrncpy((char*)WBUFP(buf,55), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,55), name, NAME_LENGTH); #endif return WBUFW(buffer,2); #else @@ -1273,9 +1273,9 @@ static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, un #endif #if PACKETVER >= 20091103 #if PACKETVER >= 20120221 - safestrncpy((char*)WBUFP(buf,71), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,71), name, NAME_LENGTH); #else - safestrncpy((char*)WBUFP(buf,62), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,62), name, NAME_LENGTH); #endif return WBUFW(buffer,2); #else @@ -1500,7 +1500,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag) memset(buf,0,packet_len(cmd)); WBUFW(buf,0) = cmd; - safestrncpy((char*)WBUFP(buf,2), hd->homunculus.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,2), hd->homunculus.name, NAME_LENGTH); // Bit field, bit 0 : rename_flag (1 = already renamed), bit 1 : homunc vaporized (1 = true), bit 2 : homunc dead (1 = true) WBUFB(buf,26) = (battle_config.hom_rename ? 0 : hd->homunculus.rename_flag) | (hd->homunculus.vaporize << 1) | (hd->homunculus.hp ? 0 : 4); WBUFW(buf,27) = hd->homunculus.level; @@ -1617,7 +1617,7 @@ int clif_homskillinfoblock(struct map_session_data *sd) WFIFOW(fd,len+6) = hd->homunculus.hskill[idx].lv; WFIFOW(fd,len+8) = skill_get_sp(id,hd->homunculus.hskill[idx].lv); WFIFOW(fd,len+10)= skill_get_range2(&sd->hd->bl,id,hd->homunculus.hskill[idx].lv,false); - safestrncpy((char*)WFIFOP(fd,len+12), skill_get_name(id), NAME_LENGTH); + safestrncpy(WFIFOCP(fd,len+12), skill_get_name(id), NAME_LENGTH); WFIFOB(fd,len+36) = (hd->homunculus.level < hom_skill_get_min_level(hd->homunculus.class_, id) || hd->homunculus.hskill[idx].lv >= hom_skill_tree_get_max(id, hd->homunculus.class_)) ? 0 : 1; len+=37; } @@ -1823,7 +1823,7 @@ void clif_changemap(struct map_session_data *sd, short m, int x, int y) WFIFOHEAD(fd,packet_len(0x91)); WFIFOW(fd,0) = 0x91; - mapindex_getmapname_ext(map_mapid2mapname(m), (char*)WFIFOP(fd,2)); + mapindex_getmapname_ext(map_mapid2mapname(m), WFIFOCP(fd,2)); WFIFOW(fd,18) = x; WFIFOW(fd,20) = y; WFIFOSET(fd,packet_len(0x91)); @@ -1840,7 +1840,7 @@ void clif_changemapserver(struct map_session_data* sd, unsigned short map_index, WFIFOHEAD(fd,packet_len(0x92)); WFIFOW(fd,0) = 0x92; - mapindex_getmapname_ext(mapindex_id2name(map_index), (char*)WFIFOP(fd,2)); + mapindex_getmapname_ext(mapindex_id2name(map_index), WFIFOCP(fd,2)); WFIFOW(fd,18) = x; WFIFOW(fd,20) = y; WFIFOL(fd,22) = htonl(ip); @@ -2118,7 +2118,7 @@ void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes) WFIFOW(fd,0)=0xb4; WFIFOW(fd,2)=slen; WFIFOL(fd,4)=npcid; - memcpy((char*)WFIFOP(fd,8), mes, slen-8); + memcpy(WFIFOCP(fd,8), mes, slen-8); WFIFOSET(fd,WFIFOW(fd,2)); } @@ -2263,7 +2263,7 @@ void clif_scriptmenu(struct map_session_data* sd, int npcid, const char* mes) WFIFOW(fd,0)=0xb7; WFIFOW(fd,2)=slen; WFIFOL(fd,4)=npcid; - memcpy((char*)WFIFOP(fd,8), mes, slen-8); + memcpy(WFIFOCP(fd,8), mes, slen-8); WFIFOSET(fd,WFIFOW(fd,2)); } @@ -2376,7 +2376,7 @@ void clif_cutin(struct map_session_data* sd, const char* image, int type) fd=sd->fd; WFIFOHEAD(fd, packet_len(0x1b3)); WFIFOW(fd,0)=0x1b3; - strncpy((char*)WFIFOP(fd,2),image,64); + strncpy(WFIFOCP(fd,2),image,64); WFIFOB(fd,66)=type; WFIFOSET(fd,packet_len(0x1b3)); } @@ -2884,7 +2884,7 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items WFIFOW(sd->fd,0)=cmd; WFIFOW(sd->fd,2)=sidx+nn*s; #if PACKETVER >= 20120925 - memset((char*)WFIFOP(sd->fd,4),0,24); //storename + memset(WFIFOCP(sd->fd,4),0,24); //storename #endif memcpy(WFIFOP(sd->fd,sidx),buf + sidx + i*s,nn*s); WFIFOSET(sd->fd,WFIFOW(sd->fd,2)); @@ -2896,7 +2896,7 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items WFIFOW(sd->fd,0)=cmde; WFIFOW(sd->fd,2)=sidxe+nn*se; #if PACKETVER >= 20120925 - memset((char*)WFIFOP(sd->fd,4),0,24); //storename + memset(WFIFOCP(sd->fd,4),0,24); //storename #endif memcpy(WFIFOP(sd->fd,sidxe),bufe + sidxe + i*se,nn*se); WFIFOSET(sd->fd,WFIFOW(sd->fd,2)); @@ -3982,7 +3982,7 @@ void clif_dispchat(struct chat_data* cd, int fd) WBUFW(buf,12) = cd->limit; WBUFW(buf,14) = (cd->owner->type == BL_NPC) ? cd->users+1 : cd->users; WBUFB(buf,16) = type; - memcpy((char*)WBUFP(buf,17), cd->title, strlen(cd->title)); // not zero-terminated + memcpy(WBUFCP(buf,17), cd->title, strlen(cd->title)); // not zero-terminated if( fd ) { WFIFOHEAD(fd,WBUFW(buf,2)); @@ -4020,7 +4020,7 @@ void clif_changechatstatus(struct chat_data* cd) WBUFW(buf,12) = cd->limit; WBUFW(buf,14) = (cd->owner->type == BL_NPC) ? cd->users+1 : cd->users; WBUFB(buf,16) = type; - memcpy((char*)WBUFP(buf,17), cd->title, strlen(cd->title)); // not zero-terminated + memcpy(WBUFCP(buf,17), cd->title, strlen(cd->title)); // not zero-terminated clif_send(buf,WBUFW(buf,2),cd->owner,CHAT); } @@ -4097,15 +4097,15 @@ void clif_joinchatok(struct map_session_data *sd,struct chat_data* cd) if(cd->owner->type == BL_NPC){ WFIFOL(fd, 30) = 1; WFIFOL(fd, 8) = 0; - safestrncpy((char*)WFIFOP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); for (i = 0; i < cd->users; i++) { WFIFOL(fd, 8+(i+1)*28) = 1; - safestrncpy((char*)WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); } }else{ for (i = 0; i < cd->users; i++) { WFIFOL(fd, 8+i*28) = (i != 0 || cd->owner->type == BL_NPC); - safestrncpy((char*)WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); } } WFIFOSET(fd, WFIFOW(fd, 2)); @@ -4123,7 +4123,7 @@ void clif_addchat(struct chat_data* cd,struct map_session_data *sd) WBUFW(buf, 0) = 0xdc; WBUFW(buf, 2) = cd->users; - safestrncpy((char*)WBUFP(buf, 4),sd->status.name,NAME_LENGTH); + safestrncpy(WBUFCP(buf, 4),sd->status.name,NAME_LENGTH); clif_send(buf,packet_len(0xdc),&sd->bl,CHAT_WOS); } @@ -4142,11 +4142,11 @@ void clif_changechatowner(struct chat_data* cd, struct map_session_data* sd) WBUFW(buf, 0) = 0xe1; WBUFL(buf, 2) = 1; - safestrncpy((char*)WBUFP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH); + safestrncpy(WBUFCP(buf,6),cd->usersd[0]->status.name,NAME_LENGTH); WBUFW(buf,30) = 0xe1; WBUFL(buf,32) = 0; - safestrncpy((char*)WBUFP(buf,36),sd->status.name,NAME_LENGTH); + safestrncpy(WBUFCP(buf,36),sd->status.name,NAME_LENGTH); clif_send(buf,packet_len(0xe1)*2,&sd->bl,CHAT); } @@ -4166,7 +4166,7 @@ void clif_leavechat(struct chat_data* cd, struct map_session_data* sd, bool flag WBUFW(buf, 0) = 0xdd; WBUFW(buf, 2) = cd->users-1; - safestrncpy((char*)WBUFP(buf,4),sd->status.name,NAME_LENGTH); + safestrncpy(WBUFCP(buf,4),sd->status.name,NAME_LENGTH); WBUFB(buf,28) = flag; clif_send(buf,packet_len(0xdd),&sd->bl,CHAT); @@ -4183,7 +4183,7 @@ void clif_traderequest(struct map_session_data* sd, const char* name) #if PACKETVER < 6 WFIFOHEAD(fd,packet_len(0xe5)); WFIFOW(fd,0) = 0xe5; - safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); WFIFOSET(fd,packet_len(0xe5)); #else struct map_session_data* tsd = map_id2sd(sd->trade_partner); @@ -4191,7 +4191,7 @@ void clif_traderequest(struct map_session_data* sd, const char* name) WFIFOHEAD(fd,packet_len(0x1f4)); WFIFOW(fd,0) = 0x1f4; - safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); WFIFOL(fd,26) = tsd->status.char_id; WFIFOW(fd,30) = tsd->status.base_level; WFIFOSET(fd,packet_len(0x1f4)); @@ -4796,7 +4796,7 @@ void clif_changemapcell(int fd, int16 m, int x, int y, int type, enum send_targe WBUFW(buf,2) = x; WBUFW(buf,4) = y; WBUFW(buf,6) = type; - mapindex_getmapname_ext(map_mapid2mapname(m),(char*)WBUFP(buf,8)); + mapindex_getmapname_ext(map_mapid2mapname(m),WBUFCP(buf,8)); if( fd ) { @@ -4855,7 +4855,7 @@ static void clif_graffiti(struct block_list *bl, struct skill_unit *unit, enum s WBUFB(buf,14) = unit->group->unit_id; WBUFB(buf,15) = 1; WBUFB(buf,16) = 1; - safestrncpy((char*)WBUFP(buf,17),unit->group->valstr,MESSAGE_SIZE); + safestrncpy(WBUFCP(buf,17),unit->group->valstr,MESSAGE_SIZE); clif_send(buf,packet_len(0x1c9),bl,target); } @@ -5140,7 +5140,7 @@ void clif_skillinfoblock(struct map_session_data *sd) WFIFOW(fd,len+6) = sd->status.skill[i].lv; WFIFOW(fd,len+8) = skill_get_sp(id,sd->status.skill[i].lv); WFIFOW(fd,len+10)= skill_get_range2(&sd->bl,id,sd->status.skill[i].lv,false); - safestrncpy((char*)WFIFOP(fd,len+12), skill_get_name(id), NAME_LENGTH); + safestrncpy(WFIFOCP(fd,len+12), skill_get_name(id), NAME_LENGTH); if(sd->status.skill[i].flag == SKILL_FLAG_PERMANENT) WFIFOB(fd,len+36) = (sd->status.skill[i].lv < skill_tree_get_max(id, sd->status.class_))? 1:0; else @@ -5188,7 +5188,7 @@ void clif_addskill(struct map_session_data *sd, int skill_id) WFIFOW(fd,8) = sd->status.skill[idx].lv; WFIFOW(fd,10) = skill_get_sp(skill_id,sd->status.skill[idx].lv); WFIFOW(fd,12)= skill_get_range2(&sd->bl,skill_id,sd->status.skill[idx].lv,false); - safestrncpy((char*)WFIFOP(fd,14), skill_get_name(skill_id), NAME_LENGTH); + safestrncpy(WFIFOCP(fd,14), skill_get_name(skill_id), NAME_LENGTH); if( sd->status.skill[idx].flag == SKILL_FLAG_PERMANENT ) WFIFOB(fd,38) = (sd->status.skill[idx].lv < skill_tree_get_max(skill_id, sd->status.class_))? 1:0; else @@ -5631,12 +5631,12 @@ void clif_skill_warppoint(struct map_session_data* sd, uint16 skill_id, uint16 s WFIFOW(fd,0) = 0x11c; WFIFOW(fd,2) = skill_id; memset(WFIFOP(fd,4), 0x00, 4*MAP_NAME_LENGTH_EXT); - if (map1 == (unsigned short)-1) strcpy((char*)WFIFOP(fd,4), "Random"); + if (map1 == (unsigned short)-1) strcpy(WFIFOCP(fd,4), "Random"); else // normal map name - if (map1 > 0) mapindex_getmapname_ext(mapindex_id2name(map1), (char*)WFIFOP(fd,4)); - if (map2 > 0) mapindex_getmapname_ext(mapindex_id2name(map2), (char*)WFIFOP(fd,20)); - if (map3 > 0) mapindex_getmapname_ext(mapindex_id2name(map3), (char*)WFIFOP(fd,36)); - if (map4 > 0) mapindex_getmapname_ext(mapindex_id2name(map4), (char*)WFIFOP(fd,52)); + if (map1 > 0) mapindex_getmapname_ext(mapindex_id2name(map1), WFIFOCP(fd,4)); + if (map2 > 0) mapindex_getmapname_ext(mapindex_id2name(map2), WFIFOCP(fd,20)); + if (map3 > 0) mapindex_getmapname_ext(mapindex_id2name(map3), WFIFOCP(fd,36)); + if (map4 > 0) mapindex_getmapname_ext(mapindex_id2name(map4), WFIFOCP(fd,52)); WFIFOSET(fd,packet_len(0x11c)); sd->menuskill_id = skill_id; @@ -6019,7 +6019,7 @@ void clif_displaymessage(const int fd, const char* mes) WFIFOW(fd, 2) = 13 + len; WFIFOL(fd, 4) = 0; WFIFOL(fd, 8) = color; - safestrncpy((char*)WFIFOP(fd, 12), line, len + 1); + safestrncpy(WFIFOCP(fd, 12), line, len + 1); WFIFOSET(fd, WFIFOW(fd, 2)); } #else @@ -6031,7 +6031,7 @@ void clif_displaymessage(const int fd, const char* mes) WFIFOHEAD(fd, 5 + len); WFIFOW(fd,0) = 0x8e; WFIFOW(fd,2) = 5 + len; // 4 + len + NULL teminate - safestrncpy((char *)WFIFOP(fd,4), line, len + 1); + safestrncpy(WFIFOCP(fd,4), line, len + 1); WFIFOSET(fd, 5 + len); } #endif @@ -6083,7 +6083,7 @@ void clif_GlobalMessage(struct block_list* bl, const char* message, enum send_ta WBUFW(buf,0)=0x8d; WBUFW(buf,2)=len+8; WBUFL(buf,4)=bl->id; - safestrncpy((char *) WBUFP(buf,8),message,len); + safestrncpy(WBUFCP(buf,8),message,len); clif_send((unsigned char *) buf,WBUFW(buf,2),bl,target); } @@ -6122,7 +6122,7 @@ void clif_channel_msg(struct Channel *channel, struct map_session_data *sd, char WFIFOW(sd->fd,2) = msg_len + 12; WFIFOL(sd->fd,4) = 0; WFIFOL(sd->fd,8) = channel_config.colors[color]; - safestrncpy((char*)WFIFOP(sd->fd,12), msg, msg_len); + safestrncpy(WFIFOCP(sd->fd,12), msg, msg_len); iter = db_iterator(channel->users); for( user = (struct map_session_data *)dbi_first(iter); dbi_exists(iter); user = (struct map_session_data *)dbi_next(iter) ) { @@ -6321,8 +6321,8 @@ void clif_wis_message(int fd, const char* nick, const char* mes, int mes_len) WFIFOHEAD(fd, mes_len + NAME_LENGTH + 4); WFIFOW(fd,0) = 0x97; WFIFOW(fd,2) = mes_len + NAME_LENGTH + 4; - safestrncpy((char*)WFIFOP(fd,4), nick, NAME_LENGTH); - safestrncpy((char*)WFIFOP(fd,28), mes, mes_len); + safestrncpy(WFIFOCP(fd,4), nick, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,28), mes, mes_len); WFIFOSET(fd,WFIFOW(fd,2)); #else struct map_session_data *ssd = map_nick2sd(nick); @@ -6330,9 +6330,9 @@ void clif_wis_message(int fd, const char* nick, const char* mes, int mes_len) WFIFOHEAD(fd, mes_len + NAME_LENGTH + 8); WFIFOW(fd,0) = 0x97; WFIFOW(fd,2) = mes_len + NAME_LENGTH + 8; - safestrncpy((char*)WFIFOP(fd,4), nick, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,4), nick, NAME_LENGTH); WFIFOL(fd,28) = (ssd && pc_get_group_level(ssd) == 99) ? 1 : 0; // isAdmin; if nonzero, also displays text above char - safestrncpy((char*)WFIFOP(fd,32), mes, mes_len); + safestrncpy(WFIFOCP(fd,32), mes, mes_len); WFIFOSET(fd,WFIFOW(fd,2)); #endif } @@ -6375,7 +6375,7 @@ void clif_solved_charname(int fd, int charid, const char* name) WFIFOHEAD(fd,packet_len(0x194)); WFIFOW(fd,0)=0x194; WFIFOL(fd,2)=charid; - safestrncpy((char*)WFIFOP(fd,6), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6), name, NAME_LENGTH); WFIFOSET(fd,packet_len(0x194)); } @@ -6635,7 +6635,7 @@ void clif_item_skill(struct map_session_data *sd,uint16 skill_id,uint16 skill_lv WFIFOW(fd, 8)=skill_lv; WFIFOW(fd,10)=skill_get_sp(skill_id,skill_lv); WFIFOW(fd,12)=skill_get_range2(&sd->bl,skill_id,skill_lv,false); - safestrncpy((char*)WFIFOP(fd,14),skill_get_name(skill_id),NAME_LENGTH); + safestrncpy(WFIFOCP(fd,14),skill_get_name(skill_id),NAME_LENGTH); WFIFOB(fd,38)=0; WFIFOSET(fd,packet_len(0x147)); } @@ -6963,7 +6963,7 @@ void clif_showvendingboard(struct block_list* bl, const char* message, int fd) WBUFW(buf,0) = 0x131; WBUFL(buf,2) = bl->id; - safestrncpy((char*)WBUFP(buf,6), message, 80); + safestrncpy(WBUFCP(buf,6), message, 80); if( fd ) { WFIFOHEAD(fd,packet_len(0x131)); @@ -7220,9 +7220,9 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd) WBUFW(buf,10) = sd->bl.x; WBUFW(buf,12) = sd->bl.y; WBUFB(buf,14) = (p->party.member[i].online)?0:1; - safestrncpy((char*)WBUFP(buf,15), p->party.name, NAME_LENGTH); - safestrncpy((char*)WBUFP(buf,39), sd->status.name, NAME_LENGTH); - mapindex_getmapname_ext(map_mapid2mapname(sd->bl.m), (char*)WBUFP(buf,63)); + safestrncpy(WBUFCP(buf,15), p->party.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,39), sd->status.name, NAME_LENGTH); + mapindex_getmapname_ext(map_mapid2mapname(sd->bl.m), WBUFCP(buf,63)); WBUFB(buf,79) = (p->party.item&1)?1:0; WBUFB(buf,80) = (p->party.item&2)?1:0; clif_send(buf,packet_len(0x1e9),&sd->bl,PARTY); @@ -7246,7 +7246,7 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) nullpo_retv(p); WBUFW(buf,0) = 0xfb; - safestrncpy((char*)WBUFP(buf,4), p->party.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,4), p->party.name, NAME_LENGTH); for(i = 0, c = 0; i < MAX_PARTY; i++) { struct party_member* m = &p->party.member[i]; @@ -7255,8 +7255,8 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) if(party_sd == NULL) party_sd = p->data[i].sd; WBUFL(buf,28+c*46) = m->account_id; - safestrncpy((char*)WBUFP(buf,28+c*46+4), m->name, NAME_LENGTH); - mapindex_getmapname_ext(mapindex_id2name(m->map), (char*)WBUFP(buf,28+c*46+28)); + safestrncpy(WBUFCP(buf,28+c*46+4), m->name, NAME_LENGTH); + mapindex_getmapname_ext(mapindex_id2name(m->map), WBUFCP(buf,28+c*46+28)); WBUFB(buf,28+c*46+44) = (m->leader) ? 0 : 1; WBUFB(buf,28+c*46+45) = (m->online) ? 0 : 1; c++; @@ -7313,7 +7313,7 @@ void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd) WFIFOHEAD(fd,packet_len(cmd)); WFIFOW(fd,0)=cmd; WFIFOL(fd,2)=sd->status.party_id; - safestrncpy((char*)WFIFOP(fd,6),p->party.name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6),p->party.name,NAME_LENGTH); WFIFOSET(fd,packet_len(cmd)); } @@ -7337,13 +7337,13 @@ void clif_party_invite_reply(struct map_session_data* sd, const char* nick, enum #if PACKETVER < 20070821 WFIFOHEAD(fd,packet_len(0xfd)); WFIFOW(fd,0) = 0xfd; - safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2),nick,NAME_LENGTH); WFIFOB(fd,26) = reply; WFIFOSET(fd,packet_len(0xfd)); #else WFIFOHEAD(fd,packet_len(0x2c5)); WFIFOW(fd,0) = 0x2c5; - safestrncpy((char*)WFIFOP(fd,2),nick,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2),nick,NAME_LENGTH); WFIFOL(fd,26) = reply; WFIFOSET(fd,packet_len(0x2c5)); #endif @@ -7437,7 +7437,7 @@ void clif_party_message(struct party_data* p, uint32 account_id, const char* mes WBUFW(buf,0)=0x109; WBUFW(buf,2)=len+8; WBUFL(buf,4)=account_id; - safestrncpy((char *)WBUFP(buf,8), mes, len); + safestrncpy(WBUFCP(buf,8), mes, len); clif_send(buf,len+8,&sd->bl,PARTY); } } @@ -7687,7 +7687,7 @@ void clif_send_petstatus(struct map_session_data *sd) pet = &sd->pd->pet; WFIFOHEAD(fd,packet_len(0x1a2)); WFIFOW(fd,0)=0x1a2; - safestrncpy((char*)WFIFOP(fd,2),pet->name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2),pet->name,NAME_LENGTH); WFIFOB(fd,26)=battle_config.pet_rename?0:pet->rename_flag; WFIFOW(fd,27)=pet->level; WFIFOW(fd,29)=pet->hungry; @@ -8004,7 +8004,7 @@ void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g) WFIFOL(fd,10)=g->position[ps].mode; WFIFOB(fd,14)=(bool)(sd->state.gmaster_flag==1); WFIFOL(fd,15)=0; // InterSID (unknown purpose) - safestrncpy((char*)WFIFOP(fd,19),g->name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,19),g->name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x16c)); } @@ -8132,10 +8132,10 @@ void clif_guild_basicinfo(struct map_session_data *sd) { WFIFOL(fd,34)=0; // Honor: (left) Vulgar [-100,100] Famed (right) WFIFOL(fd,38)=0; // Virtue: (down) Wicked [-100,100] Righteous (up) WFIFOL(fd,42)=g->emblem_id; - safestrncpy((char*)WFIFOP(fd,46),g->name, NAME_LENGTH); - safestrncpy((char*)WFIFOP(fd,70),g->master, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,46),g->name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,70),g->master, NAME_LENGTH); - safestrncpy((char*)WFIFOP(fd,94),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles" + safestrncpy(WFIFOCP(fd,94),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles" WFIFOL(fd,110) = 0; // zeny WFIFOSET(fd,packet_len(0x1b6)); @@ -8161,7 +8161,7 @@ void clif_guild_allianceinfo(struct map_session_data *sd) if(a->guild_id>0){ WFIFOL(fd,c*32+4)=a->opposition; WFIFOL(fd,c*32+8)=a->guild_id; - safestrncpy((char*)WFIFOP(fd,c*32+12),a->name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,c*32+12),a->name,NAME_LENGTH); c++; } } @@ -8206,7 +8206,7 @@ void clif_guild_memberlist(struct map_session_data *sd) WFIFOL(fd,c*104+26)=m->online; WFIFOL(fd,c*104+30)=m->position; memset(WFIFOP(fd,c*104+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty. - safestrncpy((char*)WFIFOP(fd,c*104+84),m->name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,c*104+84),m->name,NAME_LENGTH); c++; } WFIFOW(fd, 2)=c*104+4; @@ -8230,7 +8230,7 @@ void clif_guild_positionnamelist(struct map_session_data *sd) WFIFOW(fd, 0)=0x166; for(i=0;i<MAX_GUILDPOSITION;i++){ WFIFOL(fd,i*28+4)=i; - safestrncpy((char*)WFIFOP(fd,i*28+8),g->position[i].name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,i*28+8),g->position[i].name,NAME_LENGTH); } WFIFOW(fd,2)=i*28+4; WFIFOSET(fd,WFIFOW(fd,2)); @@ -8292,7 +8292,7 @@ void clif_guild_positionchanged(struct guild *g,int idx) WBUFL(buf, 8)=g->position[idx].mode; WBUFL(buf,12)=idx; WBUFL(buf,16)=g->position[idx].exp_mode; - safestrncpy((char*)WBUFP(buf,20),g->position[idx].name,NAME_LENGTH); + safestrncpy(WBUFCP(buf,20),g->position[idx].name,NAME_LENGTH); // }* if( (sd=guild_getavailablesd(g))!=NULL ) clif_send(buf,WBUFW(buf,2),&sd->bl,GUILD); @@ -8390,7 +8390,7 @@ void clif_guild_skillinfo(struct map_session_data* sd) WFIFOW(fd,p+6) = g->skill[i].lv; WFIFOW(fd,p+8) = skill_get_sp(id, g->skill[i].lv); WFIFOW(fd,p+10) = skill_get_range(id, g->skill[i].lv); - safestrncpy((char*)WFIFOP(fd,p+12), skill_get_name(id), NAME_LENGTH); + safestrncpy(WFIFOCP(fd,p+12), skill_get_name(id), NAME_LENGTH); WFIFOB(fd,p+36)= (g->skill[i].lv < guild_skill_get_max(id) && sd == g->member[0].sd) ? 1 : 0; c++; } @@ -8438,7 +8438,7 @@ void clif_guild_invite(struct map_session_data *sd,struct guild *g) WFIFOHEAD(fd,packet_len(0x16a)); WFIFOW(fd,0)=0x16a; WFIFOL(fd,2)=g->guild_id; - safestrncpy((char*)WFIFOP(fd,6),g->name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6),g->name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x16a)); } @@ -8473,7 +8473,7 @@ void clif_guild_leave(struct map_session_data *sd,const char *name,const char *m nullpo_retv(sd); WBUFW(buf, 0)=0x15a; - safestrncpy((char*)WBUFP(buf, 2),name,NAME_LENGTH); + safestrncpy(WBUFCP(buf, 2),name,NAME_LENGTH); memcpy(WBUFP(buf,26),mes,40); clif_send(buf,packet_len(0x15a),&sd->bl,GUILD_NOBG); } @@ -8494,8 +8494,8 @@ void clif_guild_expulsion(struct map_session_data* sd, const char* name, const c nullpo_retv(sd); WBUFW(buf,0) = cmd; - safestrncpy((char*)WBUFP(buf,2), name, NAME_LENGTH); - safestrncpy((char*)WBUFP(buf,26), mes, 40); + safestrncpy(WBUFCP(buf,2), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,26), mes, 40); #if PACKETVER < 20100803 memset(WBUFP(buf,66), 0, NAME_LENGTH); // account name (not used for security reasons) #endif @@ -8532,7 +8532,7 @@ void clif_guild_expulsionlist(struct map_session_data* sd) if( e->account_id > 0 ) { - safestrncpy((char*)WFIFOP(fd,4 + c*offset), e->name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,4 + c*offset), e->name, NAME_LENGTH); #if PACKETVER < 20100803 memset(WFIFOP(fd,4 + c*offset+24), 0, NAME_LENGTH); // account name (not used for security reasons) memcpy(WFIFOP(fd,4 + c*offset+48), e->mes, 40); @@ -8566,7 +8566,7 @@ void clif_guild_message(struct guild *g,uint32 account_id,const char *mes,int le WBUFW(buf, 0) = 0x17f; WBUFW(buf, 2) = len + 5; - safestrncpy((char*)WBUFP(buf,4), mes, len+1); + safestrncpy(WBUFCP(buf,4), mes, len+1); if ((sd = guild_getavailablesd(g)) != NULL) clif_send(buf, WBUFW(buf,2), &sd->bl, GUILD_NOBG); @@ -8584,7 +8584,7 @@ void clif_guild_reqalliance(struct map_session_data *sd,uint32 account_id,const WFIFOHEAD(fd,packet_len(0x171)); WFIFOW(fd,0)=0x171; WFIFOL(fd,2)=account_id; - safestrncpy((char*)WFIFOP(fd,6),name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6),name,NAME_LENGTH); WFIFOSET(fd,packet_len(0x171)); } @@ -8715,7 +8715,7 @@ void clif_talkiebox(struct block_list* bl, const char* talkie) WBUFW(buf,0) = 0x191; WBUFL(buf,2) = bl->id; - safestrncpy((char*)WBUFP(buf,6),talkie,MESSAGE_SIZE); + safestrncpy(WBUFCP(buf,6),talkie,MESSAGE_SIZE); clif_send(buf,packet_len(0x191),bl,AREA); } @@ -8748,7 +8748,7 @@ void clif_callpartner(struct map_session_data *sd) const char *p = map_charid2nick(sd->status.partner_id); struct map_session_data *p_sd = pc_get_partner(sd); if( p != NULL && p_sd != NULL && !p_sd->state.autotrade ) - safestrncpy((char*)WBUFP(buf,2), p, NAME_LENGTH); + safestrncpy(WBUFCP(buf,2), p, NAME_LENGTH); else WBUFB(buf,2) = 0; } else {// Send zero-length name if no partner, to initialize the client buffer. @@ -8786,7 +8786,7 @@ void clif_divorced(struct map_session_data* sd, const char* name) fd=sd->fd; WFIFOHEAD(fd,packet_len(0x205)); WFIFOW(fd,0)=0x205; - safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); WFIFOSET(fd, packet_len(0x205)); } @@ -8803,7 +8803,7 @@ void clif_marriage_proposal(int fd, struct map_session_data *sd, struct map_sess WFIFOW(fd,0) = 0x1e2; WFIFOL(fd,2) = ssd->status.account_id; WFIFOL(fd,6) = ssd->status.char_id; - safestrncpy((char*)WFIFOP(fd,10), ssd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,10), ssd->status.name, NAME_LENGTH); WFIFOSET(fd, packet_len(0x1e2)); } */ @@ -8833,7 +8833,7 @@ void clif_disp_message(struct block_list* src, const char* mes, int len, enum se WBUFW(buf, 0) = 0x17f; WBUFW(buf, 2) = len + 5; - safestrncpy((char*)WBUFP(buf,4), mes, len+1); + safestrncpy(WBUFCP(buf,4), mes, len+1); clif_send(buf, WBUFW(buf,2), src, target); } @@ -8917,7 +8917,7 @@ void clif_GM_silence(struct map_session_data* sd, struct map_session_data* tsd, WFIFOHEAD(fd,packet_len(0x14b)); WFIFOW(fd,0) = 0x14b; WFIFOB(fd,2) = type; - safestrncpy((char*)WFIFOP(fd,3), sd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,3), sd->status.name, NAME_LENGTH); WFIFOSET(fd, packet_len(0x14b)); } @@ -8979,7 +8979,7 @@ void clif_playBGM(struct map_session_data* sd, const char* name) fd = sd->fd; WFIFOHEAD(fd,packet_len(0x7fe)); WFIFOW(fd,0) = 0x7fe; - safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); WFIFOSET(fd,packet_len(0x7fe)); } @@ -9007,7 +9007,7 @@ void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const fd = sd->fd; WFIFOHEAD(fd,packet_len(0x1d3)); WFIFOW(fd,0) = 0x1d3; - safestrncpy((char*)WFIFOP(fd,2), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); WFIFOB(fd,26) = type; WFIFOL(fd,27) = 0; WFIFOL(fd,31) = bl->id; @@ -9021,7 +9021,7 @@ void clif_soundeffectall(struct block_list* bl, const char* name, int type, enum nullpo_retv(bl); WBUFW(buf,0) = 0x1d3; - safestrncpy((char*)WBUFP(buf,2), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,2), name, NAME_LENGTH); WBUFB(buf,26) = type; WBUFL(buf,27) = 0; WBUFL(buf,31) = bl->id; @@ -9096,7 +9096,7 @@ int clif_colormes(int fd, unsigned long color, const char* msg) { WFIFOW(fd,2) = msg_len + 12; WFIFOL(fd,4) = 0; WFIFOL(fd,8) = color; //either color_table or channel_table - safestrncpy((char*)WFIFOP(fd,12), msg, msg_len); + safestrncpy(WFIFOCP(fd,12), msg, msg_len); WFIFOSET(fd, msg_len + 12); return 0; @@ -9120,7 +9120,7 @@ void clif_messagecolor(struct block_list* bl, unsigned long color, const char* m WBUFW(buf,2) = msg_len + 12; WBUFL(buf,4) = bl->id; WBUFL(buf,8) = color; - memcpy((char*)WBUFP(buf,12), msg, msg_len); + memcpy(WBUFCP(buf,12), msg, msg_len); clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC); } @@ -9142,7 +9142,7 @@ void clif_messagecolor2(struct map_session_data *sd, unsigned long color, const WFIFOW(fd,2) = msg_len+12; WFIFOL(fd,4) = 0; WFIFOL(fd,8) = color; - safestrncpy((char*)WFIFOP(fd,12), msg, msg_len); + safestrncpy(WFIFOCP(fd,12), msg, msg_len); WFIFOSET(fd, WFIFOW(fd,2)); } } @@ -9272,14 +9272,14 @@ void clif_charnameack (int fd, struct block_list *bl) } if( sd->fakename[0] ) { - safestrncpy((char*)WBUFP(buf,6), sd->fakename, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), sd->fakename, NAME_LENGTH); WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0; #if PACKETVER >= 20150513 WBUFL(buf,102) = 0; // Title ID #endif break; } - safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), sd->status.name, NAME_LENGTH); if( sd->status.party_id ){ p = party_search(sd->status.party_id); @@ -9287,7 +9287,7 @@ void clif_charnameack (int fd, struct block_list *bl) // do not display party unless the player is also in a guild if( p && ( sd->guild || battle_config.display_party_name ) ){ - safestrncpy((char*)WBUFP(buf,30), p->party.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,30), p->party.name, NAME_LENGTH); }else{ WBUFB(buf,30) = 0; } @@ -9297,8 +9297,8 @@ void clif_charnameack (int fd, struct block_list *bl) ARR_FIND(0, sd->guild->max_member, i, sd->guild->member[i].account_id == sd->status.account_id && sd->guild->member[i].char_id == sd->status.char_id); - safestrncpy((char*)WBUFP(buf,54), sd->guild->name,NAME_LENGTH); - safestrncpy((char*)WBUFP(buf,78), sd->guild->position[i].name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,54), sd->guild->name,NAME_LENGTH); + safestrncpy(WBUFCP(buf,78), sd->guild->position[i].name, NAME_LENGTH); }else{ //Assume no guild. WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; @@ -9311,29 +9311,29 @@ void clif_charnameack (int fd, struct block_list *bl) break; //[blackhole89] case BL_HOM: - safestrncpy((char*)WBUFP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH); break; case BL_MER: - safestrncpy((char*)WBUFP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH); break; case BL_PET: - safestrncpy((char*)WBUFP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH); break; case BL_NPC: - safestrncpy((char*)WBUFP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH); break; case BL_MOB: { struct mob_data *md = (struct mob_data *)bl; nullpo_retv(md); - safestrncpy((char*)WBUFP(buf,6), md->name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), md->name, NAME_LENGTH); if( md->guardian_data && md->guardian_data->guild_id ) { WBUFW(buf, 0) = cmd = 0x195; WBUFB(buf,30) = 0; - safestrncpy((char*)WBUFP(buf,54), md->guardian_data->guild_name, NAME_LENGTH); - safestrncpy((char*)WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,54), md->guardian_data->guild_name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH); } else if( battle_config.show_mob_info ) { @@ -9350,7 +9350,7 @@ void clif_charnameack (int fd, struct block_list *bl) if( str_p != mobhp ) { *(str_p-3) = '\0'; //Remove trailing space + pipe. - safestrncpy((char*)WBUFP(buf,30), mobhp, NAME_LENGTH); + safestrncpy(WBUFCP(buf,30), mobhp, NAME_LENGTH); WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; } @@ -9362,7 +9362,7 @@ void clif_charnameack (int fd, struct block_list *bl) // break; return; case BL_ELEM: - safestrncpy((char*)WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); break; default: ShowError("clif_charnameack: bad type %d(%d)\n", bl->type, bl->id); @@ -9397,7 +9397,7 @@ void clif_charnameupdate (struct map_session_data *ssd) WBUFW(buf,0) = cmd; WBUFL(buf,2) = ssd->bl.id; - safestrncpy((char*)WBUFP(buf,6), ssd->status.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), ssd->status.name, NAME_LENGTH); if (!battle_config.display_party_name) { if (ssd->status.party_id > 0 && ssd->status.guild_id > 0 && (g = ssd->guild) != NULL) @@ -9415,14 +9415,14 @@ void clif_charnameupdate (struct map_session_data *ssd) } if( p ) - safestrncpy((char*)WBUFP(buf,30), p->party.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,30), p->party.name, NAME_LENGTH); else WBUFB(buf,30) = 0; if( g && ps >= 0 && ps < MAX_GUILDPOSITION ) { - safestrncpy((char*)WBUFP(buf,54), g->name,NAME_LENGTH); - safestrncpy((char*)WBUFP(buf,78), g->position[ps].name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,54), g->name,NAME_LENGTH); + safestrncpy(WBUFCP(buf,78), g->position[ps].name, NAME_LENGTH); } else { @@ -9475,14 +9475,14 @@ void clif_disp_overhead(struct block_list *bl, const char* mes) WBUFW(buf,0) = 0x8d; WBUFW(buf,2) = len_mes + 8; // len of message + 8 (command+len+id) WBUFL(buf,4) = bl->id; - safestrncpy((char*)WBUFP(buf,8), mes, len_mes); + safestrncpy(WBUFCP(buf,8), mes, len_mes); clif_send(buf, WBUFW(buf,2), bl, AREA_CHAT_WOC); // send back message to the speaker if( bl->type == BL_PC ) { WBUFW(buf,0) = 0x8e; WBUFW(buf, 2) = len_mes + 4; - safestrncpy((char*)WBUFP(buf,4), mes, len_mes); + safestrncpy(WBUFCP(buf,4), mes, len_mes); clif_send(buf, WBUFW(buf,2), bl, SELF); } } @@ -9563,7 +9563,7 @@ void clif_starskill(struct map_session_data* sd, const char* mapname, int monste WFIFOHEAD(fd,packet_len(0x20e)); WFIFOW(fd,0) = 0x20e; - safestrncpy((char*)WFIFOP(fd,2), mapname, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), mapname, NAME_LENGTH); WFIFOL(fd,26) = monster_id; WFIFOB(fd,30) = star; WFIFOB(fd,31) = result; @@ -9689,7 +9689,7 @@ void clif_viewequip_ack(struct map_session_data* sd, struct map_session_data* ts #else WBUFW(buf, 0) = 0xa2d; #endif - safestrncpy((char*)WBUFP(buf, 4), tsd->status.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf, 4), tsd->status.name, NAME_LENGTH); WBUFW(buf,28) = tsd->status.class_; WBUFW(buf,30) = tsd->vd.hair_style; WBUFW(buf,32) = tsd->vd.head_bottom; @@ -9782,7 +9782,7 @@ static bool clif_process_message(struct map_session_data* sd, bool whisperFormat info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; packetLength = RFIFOW(fd,info->pos[0]); - input = (const char*)RFIFOP(fd,info->pos[1]); + input = RFIFOCP(fd,info->pos[1]); // basic structure check for the 4-byte header if( packetLength < 4 ){ @@ -10706,7 +10706,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd) WFIFOHEAD(fd,4+length); WFIFOW(fd,0) = 0x8e; WFIFOW(fd,2) = (uint16)(4+length); - safestrncpy((char*)WFIFOP(fd,4), output, length ); + safestrncpy(WFIFOCP(fd,4), output, length ); WFIFOSET(fd, WFIFOW(fd,2)); #ifdef PCRE_SUPPORT @@ -10728,7 +10728,7 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) char* map_name; struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; - map_name = (char*)RFIFOP(fd,info->pos[0]); + map_name = RFIFOCP(fd,info->pos[0]); map_name[MAP_NAME_LENGTH_EXT-1]='\0'; safesnprintf(command,sizeof(command),"%cmapmove %s %d %d", atcommand_symbol, map_name, RFIFOW(fd,info->pos[1]), //x @@ -11115,7 +11115,7 @@ void clif_parse_Broadcast(int fd, struct map_session_data* sd) { char command[CHAT_SIZE_MAX+11]; struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; unsigned int len = RFIFOW(fd,info->pos[0])-4; - char* msg = (char*)RFIFOP(fd,info->pos[1]); + char* msg = RFIFOCP(fd,info->pos[1]); // as the length varies depending on the command used, just block unreasonably long strings mes_len_check(msg, len, CHAT_SIZE_MAX); @@ -11449,8 +11449,8 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) int len = RFIFOW(fd,info->pos[0])-15; int limit = RFIFOW(fd,info->pos[1]); bool pub = (RFIFOB(fd,info->pos[2]) != 0); - const char* password = (char*)RFIFOP(fd,info->pos[3]); //not zero-terminated - const char* title = (char*)RFIFOP(fd,info->pos[4]); // not zero-terminated + const char* password = RFIFOCP(fd,info->pos[3]); //not zero-terminated + const char* title = RFIFOCP(fd,info->pos[4]); // not zero-terminated char s_password[CHATROOM_PASS_SIZE]; char s_title[CHATROOM_TITLE_SIZE]; @@ -11485,7 +11485,7 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) void clif_parse_ChatAddMember(int fd, struct map_session_data* sd){ struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; int chatid = RFIFOL(fd,info->pos[0]); - const char* password = (char*)RFIFOP(fd,info->pos[1]); // not zero-terminated + const char* password = RFIFOCP(fd,info->pos[1]); // not zero-terminated chat_joinchat(sd,chatid,password); } @@ -11501,8 +11501,8 @@ void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data* sd){ int len = RFIFOW(fd,info->pos[0])-15; int limit = RFIFOW(fd,info->pos[1]); bool pub = (RFIFOB(fd,info->pos[2]) != 0); - const char* password = (char*)RFIFOP(fd,info->pos[3]); // not zero-terminated - const char* title = (char*)RFIFOP(fd,info->pos[4]); // not zero-terminated + const char* password = RFIFOCP(fd,info->pos[3]); // not zero-terminated + const char* title = RFIFOCP(fd,info->pos[4]); // not zero-terminated char s_password[CHATROOM_PASS_SIZE]; char s_title[CHATROOM_TITLE_SIZE]; @@ -11524,7 +11524,7 @@ void clif_parse_ChatRoomStatusChange(int fd, struct map_session_data* sd){ void clif_parse_ChangeChatOwner(int fd, struct map_session_data* sd) { //int role = RFIFOL(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); - chat_changechatowner(sd,(char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1])); + chat_changechatowner(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1])); } @@ -11532,7 +11532,7 @@ void clif_parse_ChangeChatOwner(int fd, struct map_session_data* sd) /// 00e2 <name>.24B void clif_parse_KickFromChat(int fd,struct map_session_data *sd) { - chat_kickchat(sd,(char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + chat_kickchat(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); } @@ -12043,7 +12043,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin return; } //You can't use Graffiti/TalkieBox AND have a vending open, so this is safe. - safestrncpy(sd->message, (char*)RFIFOP(fd,skillmoreinfo), MESSAGE_SIZE); + safestrncpy(sd->message, RFIFOCP(fd,skillmoreinfo), MESSAGE_SIZE); } if( sd->ud.skilltimer != INVALID_TIMER ) @@ -12139,7 +12139,7 @@ void clif_parse_UseSkillMap(int fd, struct map_session_data* sd) uint16 skill_id = RFIFOW(fd,info->pos[0]); char map_name[MAP_NAME_LENGTH]; - mapindex_getmapname((char*)RFIFOP(fd,info->pos[1]), map_name); + mapindex_getmapname(RFIFOCP(fd,info->pos[1]), map_name); sd->state.workinprogress = WIP_DISABLE_NONE; if(skill_id != sd->menuskill_id) @@ -12325,7 +12325,7 @@ void clif_parse_NpcStringInput(int fd, struct map_session_data* sd){ struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; int message_len = RFIFOW(fd,info->pos[0])-8; int npcid = RFIFOL(fd,info->pos[1]); - const char* message = (char*)RFIFOP(fd,info->pos[2]); + const char* message = RFIFOCP(fd,info->pos[2]); if( message_len <= 0 ) return; // invalid input @@ -12480,7 +12480,7 @@ void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd) struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; char command[CHAT_SIZE_MAX+16]; unsigned int len = RFIFOW(fd,info->pos[0])-4; - char* msg = (char*)RFIFOP(fd,info->pos[1]); + char* msg = RFIFOCP(fd,info->pos[1]); // as the length varies depending on the command used, just block unreasonably long strings mes_len_check(msg, len, CHAT_SIZE_MAX); @@ -12646,7 +12646,7 @@ void clif_storagepassword_result(struct map_session_data* sd, short result, shor /// Party creation request /// 00f9 <party name>.24B (CZ_MAKE_GROUP) void clif_parse_CreateParty(int fd, struct map_session_data *sd){ - char* name = (char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + char* name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); name[NAME_LENGTH-1] = '\0'; if( map[sd->bl.m].flag.partylock ) {// Party locked. @@ -12664,7 +12664,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd){ /// 01e8 <party name>.24B <item pickup rule>.B <item share rule>.B (CZ_MAKE_GROUP2) void clif_parse_CreateParty2(int fd, struct map_session_data *sd){ struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; - char* name = (char*)RFIFOP(fd,info->pos[0]); + char* name = RFIFOCP(fd,info->pos[0]); int item1 = RFIFOB(fd,info->pos[1]); int item2 = RFIFOB(fd,info->pos[2]); name[NAME_LENGTH-1] = '\0'; @@ -12706,7 +12706,7 @@ void clif_parse_PartyInvite(int fd, struct map_session_data *sd) /// 02c4 <char name>.24B (CZ_PARTY_JOIN_REQ) void clif_parse_PartyInvite2(int fd, struct map_session_data *sd){ struct map_session_data *t_sd; - char *name = (char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + char *name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); name[NAME_LENGTH-1] = '\0'; if(map[sd->bl.m].flag.partylock) {// Party locked. @@ -12768,7 +12768,7 @@ void clif_parse_RemovePartyMember(int fd, struct map_session_data *sd) return; } party_removemember(sd,RFIFOL(fd,info->pos[0]), - (char*)RFIFOP(fd,info->pos[1])); + RFIFOCP(fd,info->pos[1])); } @@ -12894,7 +12894,7 @@ void clif_PartyBookingSearchAck(int fd, struct party_booking_ad_info** results, { pb_ad = results[i]; WFIFOL(fd,i*size+5) = pb_ad->index; - safestrncpy((char*)WFIFOP(fd,i*size+9),pb_ad->charname,NAME_LENGTH); + safestrncpy(WFIFOCP(fd,i*size+9),pb_ad->charname,NAME_LENGTH); WFIFOL(fd,i*size+33) = pb_ad->starttime; // FIXME: This is expire time WFIFOW(fd,i*size+37) = pb_ad->p_detail.level; WFIFOW(fd,i*size+39) = pb_ad->p_detail.mapid; @@ -12958,7 +12958,7 @@ void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_boo WBUFW(buf,0) = 0x809; WBUFL(buf,2) = pb_ad->index; - safestrncpy((char*)WBUFP(buf,6),pb_ad->charname,NAME_LENGTH); + safestrncpy(WBUFCP(buf,6),pb_ad->charname,NAME_LENGTH); WBUFL(buf,30) = pb_ad->starttime; // FIXME: This is expire time WBUFW(buf,34) = pb_ad->p_detail.level; WBUFW(buf,36) = pb_ad->p_detail.mapid; @@ -13059,7 +13059,7 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd){ int cmd = RFIFOW(fd,0); struct s_packet_db* info = &packet_db[sd->packet_ver][cmd]; short len = (short)RFIFOW(fd,info->pos[0]); - const char* message = (char*)RFIFOP(fd,info->pos[1]); + const char* message = RFIFOCP(fd,info->pos[1]); const uint8* data = (uint8*)RFIFOP(fd,info->pos[3]); if(cmd == 0x12f){ // (CZ_REQ_OPENSTORE) @@ -13098,7 +13098,7 @@ void clif_parse_OpenVending(int fd, struct map_session_data* sd){ /// 0165 <char id>.L <guild name>.24B void clif_parse_CreateGuild(int fd,struct map_session_data *sd){ //int charid = RFIFOL(fd,packet_db[sd->packet_ver][cmd].pos[0]); - char* name = (char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); + char* name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[1]); name[NAME_LENGTH-1] = '\0'; if(map[sd->bl.m].flag.guildlock) { //Guild locked. @@ -13174,7 +13174,7 @@ void clif_parse_GuildChangePositionInfo(int fd, struct map_session_data *sd) return; for(i = idxgpos; i < len; i += 40 ){ - guild_change_position(sd->status.guild_id, RFIFOL(fd,i), RFIFOL(fd,i+4), RFIFOL(fd,i+12), (char*)RFIFOP(fd,i+16)); + guild_change_position(sd->status.guild_id, RFIFOL(fd,i), RFIFOL(fd,i+4), RFIFOL(fd,i+12), RFIFOCP(fd,i+16)); } } @@ -13282,8 +13282,8 @@ void clif_parse_GuildChangeEmblem(int fd,struct map_session_data *sd){ void clif_parse_GuildChangeNotice(int fd, struct map_session_data* sd){ struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; int guild_id = RFIFOL(fd,info->pos[0]); - char* msg1 = (char*)RFIFOP(fd,info->pos[1]); - char* msg2 = (char*)RFIFOP(fd,info->pos[2]); + char* msg1 = RFIFOCP(fd,info->pos[1]); + char* msg2 = RFIFOCP(fd,info->pos[2]); if(!sd->state.gmaster_flag) return; @@ -13332,7 +13332,7 @@ void clif_parse_GuildInvite(int fd,struct map_session_data *sd){ /// 0916 <char name>.24B (CZ_REQ_JOIN_GUILD2) void clif_parse_GuildInvite2(int fd, struct map_session_data *sd) { - struct map_session_data *t_sd = map_nick2sd((char *)RFIFOP(fd, packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + struct map_session_data *t_sd = map_nick2sd(RFIFOCP(fd, packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); if (clif_sub_guild_invite(fd, sd, t_sd)) return; @@ -13367,7 +13367,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd){ guild_leave(sd,RFIFOL(fd,info->pos[0]), RFIFOL(fd,info->pos[1]), RFIFOL(fd,info->pos[2]), - (char*)RFIFOP(fd,info->pos[3])); + RFIFOCP(fd,info->pos[3])); } @@ -13383,7 +13383,7 @@ void clif_parse_GuildExpulsion(int fd,struct map_session_data *sd){ guild_expulsion(sd,RFIFOL(fd,info->pos[0]), RFIFOL(fd,info->pos[1]), RFIFOL(fd,info->pos[2]), - (char*)RFIFOP(fd,info->pos[3])); + RFIFOCP(fd,info->pos[3])); } @@ -13501,7 +13501,7 @@ void clif_parse_GuildBreak(int fd, struct map_session_data *sd) clif_displaymessage(fd, msg_txt(sd,228)); return; } - guild_break(sd,(char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + guild_break(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); } @@ -13574,7 +13574,7 @@ void clif_parse_SendEmotion(int fd, struct map_session_data *sd) /// 01a5 <name>.24B void clif_parse_ChangePetName(int fd, struct map_session_data *sd) { - pet_change_name(sd,(char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + pet_change_name(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); } @@ -13658,7 +13658,7 @@ void clif_parse_GMShift(int fd, struct map_session_data *sd) char *player_name; char command[NAME_LENGTH+8]; - player_name = (char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + player_name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); player_name[NAME_LENGTH-1] = '\0'; safesnprintf(command,sizeof(command),"%cjumpto %s", atcommand_symbol, player_name); @@ -13695,7 +13695,7 @@ void clif_parse_GMRecall(int fd, struct map_session_data *sd) char *player_name; char command [NAME_LENGTH+8]; - player_name = (char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + player_name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); player_name[NAME_LENGTH-1] = '\0'; safesnprintf(command,sizeof(command),"%crecall %s", atcommand_symbol, player_name); @@ -13747,7 +13747,7 @@ void clif_parse_GM_Item_Monster(int fd, struct map_session_data *sd) // char str[24]; //#endif - str = (char*)RFIFOP(fd,info->pos[0]); + str = RFIFOCP(fd,info->pos[0]); if (!str || str[0] == '\0') return; if (strcmpi(str,"SPPOINT") == 0 || strcmpi(str,"JOBLEVEL") == 0) //! TODO /sp sends these values @@ -13847,7 +13847,7 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd) void clif_parse_GMRc(int fd, struct map_session_data* sd) { char command[NAME_LENGTH+15]; - char *name = (char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); + char *name = RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]); name[NAME_LENGTH-1] = '\0'; safesnprintf(command,sizeof(command),"%cmute %d %s", atcommand_symbol, 60, name); @@ -13862,7 +13862,7 @@ void clif_account_name(int fd, uint32 account_id, const char* accname) WFIFOHEAD(fd,packet_len(0x1e0)); WFIFOW(fd,0) = 0x1e0; WFIFOL(fd,2) = account_id; - safestrncpy((char*)WFIFOP(fd,6), accname, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6), accname, NAME_LENGTH); WFIFOSET(fd,packet_len(0x1e0)); } @@ -13920,7 +13920,7 @@ void clif_parse_PMIgnore(int fd, struct map_session_data* sd) int i; struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; - nick = (char*)RFIFOP(fd,info->pos[0]); + nick = RFIFOCP(fd,info->pos[0]); nick[NAME_LENGTH-1] = '\0'; // to be sure that the player name has at most 23 characters type = RFIFOB(fd,info->pos[1]); @@ -14007,7 +14007,7 @@ void clif_PMIgnoreList(struct map_session_data* sd) WFIFOW(fd,0) = 0xd4; for( i = 0; i < ARRAYLENGTH(sd->ignore) && sd->ignore[i].name[0]; i++ ) { - safestrncpy((char*)WFIFOP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH); } WFIFOW(fd,2) = 4+i*NAME_LENGTH; @@ -14122,7 +14122,7 @@ void clif_friendslist_send(struct map_session_data *sd) for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) { WFIFOL(fd, 4 + 32 * i + 0) = sd->status.friends[i].account_id; WFIFOL(fd, 4 + 32 * i + 4) = sd->status.friends[i].char_id; - safestrncpy((char*)WFIFOP(fd, 4 + 32 * i + 8), sd->status.friends[i].name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 4 + 32 * i + 8), sd->status.friends[i].name, NAME_LENGTH); } if (i) { @@ -14156,7 +14156,7 @@ void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_dat if (f_sd) { WFIFOL(fd,4) = f_sd->status.account_id; WFIFOL(fd,8) = f_sd->status.char_id; - safestrncpy((char*)WFIFOP(fd, 12), f_sd->status.name,NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 12), f_sd->status.name,NAME_LENGTH); } WFIFOSET(fd, packet_len(0x209)); } @@ -14172,7 +14172,7 @@ void clif_friendlist_req(struct map_session_data* sd, uint32 account_id, uint32 WFIFOW(fd,0) = 0x207; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = char_id; - safestrncpy((char*)WFIFOP(fd,10), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,10), name, NAME_LENGTH); WFIFOSET(fd,packet_len(0x207)); } @@ -14184,7 +14184,7 @@ void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd) struct map_session_data *f_sd; int i; - f_sd = map_nick2sd((char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + f_sd = map_nick2sd(RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); // ensure that the request player's friend list is not full ARR_FIND(0, MAX_FRIENDS, i, sd->status.friends[i].char_id == 0); @@ -14454,15 +14454,15 @@ void clif_alchemist(struct map_session_data* sd) if (strcmp(chemist_fame_list[i].name, "-") == 0 && (name = map_charid2nick(chemist_fame_list[i].id)) != NULL) { - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), name, NAME_LENGTH); } else - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), chemist_fame_list[i].name, NAME_LENGTH); } else - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), "None", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = chemist_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = 0; } @@ -14507,15 +14507,15 @@ void clif_taekwon(struct map_session_data* sd) if (strcmp(taekwon_fame_list[i].name, "-") == 0 && (name = map_charid2nick(taekwon_fame_list[i].id)) != NULL) { - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), name, NAME_LENGTH); } else - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), taekwon_fame_list[i].name, NAME_LENGTH); } else - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "None", NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), "None", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = taekwon_fame_list[i].fame; } for(;i < 10; i++) { //In case the MAX is less than 10. - safestrncpy((char*)WFIFOP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); + safestrncpy(WFIFOCP(fd, 2 + 24 * i), "Unavailable", NAME_LENGTH); WFIFOL(fd, 242 + i * 4) = 0; } WFIFOSET(fd, packet_len(0x226)); @@ -14553,7 +14553,7 @@ void clif_ranking_pk(struct map_session_data* sd) WFIFOHEAD(fd,packet_len(0x238)); WFIFOW(fd,0) = 0x238; for(i=0;i<10;i++){ - safestrncpy((char*)WFIFOP(fd,i*24+2), "Unknown", NAME_LENGTH); + safestrncpy(WFIFOCP(fd,i*24+2), "Unknown", NAME_LENGTH); WFIFOL(fd,i*4+242) = 0; } WFIFOSET(fd, packet_len(0x238)); @@ -14615,7 +14615,7 @@ void clif_feel_req(int fd, struct map_session_data *sd, uint16 skill_lv) /// Request to change homunculus' name (CZ_RENAME_MER). /// 0231 <name>.24B void clif_parse_ChangeHomunculusName(int fd, struct map_session_data *sd){ - hom_change_name(sd,(char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); + hom_change_name(sd,RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])); } @@ -14786,7 +14786,7 @@ void clif_parse_Check(int fd, struct map_session_data *sd) if(!pc_has_permission(sd, PC_PERM_USE_CHECK)) return; - safestrncpy(charname, (const char*)RFIFOP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), sizeof(charname)); + safestrncpy(charname, RFIFOCP(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0]), sizeof(charname)); if( ( pl_sd = map_nick2sd(charname) ) == NULL || pc_get_group_level(sd) < pc_get_group_level(pl_sd) ) { @@ -14883,8 +14883,8 @@ void clif_Mail_new(int fd, int mail_id, const char *sender, const char *title) WFIFOHEAD(fd,packet_len(0x24a)); WFIFOW(fd,0) = 0x24a; WFIFOL(fd,2) = mail_id; - safestrncpy((char*)WFIFOP(fd,6), title, MAIL_TITLE_LENGTH); - safestrncpy((char*)WFIFOP(fd,46), sender, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6), title, MAIL_TITLE_LENGTH); + safestrncpy(WFIFOCP(fd,46), sender, NAME_LENGTH); WFIFOSET(fd,packet_len(0x24a)); } @@ -14930,7 +14930,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd) WFIFOL(fd,8+73*j) = msg->id; memcpy(WFIFOP(fd,12+73*j), msg->title, MAIL_TITLE_LENGTH); WFIFOB(fd,52+73*j) = (msg->status != MAIL_UNREAD); - safestrncpy((char*)WFIFOP(fd,53+73*j), msg->send_name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,53+73*j), msg->send_name, NAME_LENGTH); WFIFOL(fd,77+73*j) = (uint32)msg->timestamp; j++; } @@ -14990,8 +14990,8 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id) WFIFOW(fd,0) = 0x242; WFIFOW(fd,2) = len; WFIFOL(fd,4) = msg->id; - safestrncpy((char*)WFIFOP(fd,8), msg->title, MAIL_TITLE_LENGTH + 1); - safestrncpy((char*)WFIFOP(fd,48), msg->send_name, NAME_LENGTH + 1); + safestrncpy(WFIFOCP(fd,8), msg->title, MAIL_TITLE_LENGTH + 1); + safestrncpy(WFIFOCP(fd,48), msg->send_name, NAME_LENGTH + 1); WFIFOL(fd,72) = 0; WFIFOL(fd,76) = msg->zeny; @@ -15010,7 +15010,7 @@ void clif_Mail_read(struct map_session_data *sd, int mail_id) memset(WFIFOP(fd,80), 0x00, 19); WFIFOB(fd,99) = (unsigned char)msg_len; - safestrncpy((char*)WFIFOP(fd,100), msg->body, msg_len + 1); + safestrncpy(WFIFOCP(fd,100), msg->body, msg_len + 1); WFIFOSET(fd,len); if (msg->status == MAIL_UNREAD) { @@ -15195,7 +15195,7 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd) return; } - mail_send(sd, (char*)RFIFOP(fd,info->pos[1]), (char*)RFIFOP(fd,info->pos[2]), (char*)RFIFOP(fd,info->pos[4]), RFIFOB(fd,info->pos[3])); + mail_send(sd, RFIFOCP(fd,info->pos[1]), RFIFOCP(fd,info->pos[2]), RFIFOCP(fd,info->pos[4]), RFIFOB(fd,info->pos[3])); } @@ -15244,7 +15244,7 @@ void clif_Auction_results(struct map_session_data *sd, short count, short pages, memcpy(&auction, RBUFP(buf,i * len), len); WFIFOL(fd,k) = auction.auction_id; - safestrncpy((char*)WFIFOP(fd,4+k), auction.seller_name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,4+k), auction.seller_name, NAME_LENGTH); if( (item = itemdb_exists(auction.item.nameid)) != NULL && item->view_id > 0 ) WFIFOW(fd,28+k) = item->view_id; @@ -15262,7 +15262,7 @@ void clif_Auction_results(struct map_session_data *sd, short count, short pages, WFIFOW(fd,45+k) = auction.item.card[3]; WFIFOL(fd,47+k) = auction.price; WFIFOL(fd,51+k) = auction.buynow; - safestrncpy((char*)WFIFOP(fd,55+k), auction.buyer_name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,55+k), auction.buyer_name, NAME_LENGTH); WFIFOL(fd,79+k) = (uint32)auction.timestamp; } WFIFOSET(fd,WFIFOW(fd,2)); @@ -15529,7 +15529,7 @@ void clif_parse_Auction_search(int fd, struct map_session_data* sd){ clif_parse_Auction_cancelreg(fd, sd); - safestrncpy(search_text, (char*)RFIFOP(fd,info->pos[2]), sizeof(search_text)); + safestrncpy(search_text, RFIFOCP(fd,info->pos[2]), sizeof(search_text)); intif_Auction_requestlist(sd->status.char_id, type, price, search_text, page); } @@ -15789,7 +15789,7 @@ void clif_Adopt_request(struct map_session_data *sd, struct map_session_data *sr WFIFOW(fd,0) = 0x1f6; WFIFOL(fd,2) = src->status.account_id; WFIFOL(fd,6) = p_id; - safestrncpy((char*)WFIFOP(fd,10), src->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,10), src->status.name, NAME_LENGTH); WFIFOSET(fd,34); } @@ -15873,7 +15873,7 @@ void clif_bossmapinfo(int fd, struct mob_data *md, short flag) WFIFOW(fd,11) = hours; // Hours WFIFOW(fd,13) = minutes; // Minutes } - safestrncpy((char*)WFIFOP(fd,19), md->db->jname, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,19), md->db->jname, NAME_LENGTH); } WFIFOSET(fd,70); @@ -16037,7 +16037,7 @@ void clif_quest_send_mission(struct map_session_data *sd) WFIFOL(fd, i*104+22+j*30) = qi->objectives[j].mob; WFIFOW(fd, i*104+26+j*30) = sd->quest_log[i].count[j]; mob = mob_db(qi->objectives[j].mob); - safestrncpy((char*)WFIFOP(fd, i*104+28+j*30), mob->jname, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, i*104+28+j*30), mob->jname, NAME_LENGTH); } } @@ -16066,7 +16066,7 @@ void clif_quest_add(struct map_session_data *sd, struct quest *qd) WFIFOL(fd, i*30+17) = qi->objectives[i].mob; WFIFOW(fd, i*30+21) = qd->count[i]; mob = mob_db(qi->objectives[i].mob); - safestrncpy((char*)WFIFOP(fd, i*30+23), mob->jname, NAME_LENGTH); + safestrncpy(WFIFOCP(fd, i*30+23), mob->jname, NAME_LENGTH); } WFIFOSET(fd, packet_len(0x2b3)); @@ -16265,7 +16265,7 @@ void clif_mercenary_info(struct map_session_data *sd) WFIFOW(fd,16) = status->mdef; WFIFOW(fd,18) = status->flee; WFIFOW(fd,20) = status->amotion; - safestrncpy((char*)WFIFOP(fd,22), md->db->name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,22), md->db->name, NAME_LENGTH); WFIFOW(fd,46) = md->db->lv; WFIFOL(fd,48) = status->hp; WFIFOL(fd,52) = status->max_hp; @@ -16307,7 +16307,7 @@ void clif_mercenary_skillblock(struct map_session_data *sd) WFIFOW(fd,len+6) = md->db->skill[idx].lv; WFIFOW(fd,len+8) = skill_get_sp(id, md->db->skill[idx].lv); WFIFOW(fd,len+10) = skill_get_range2(&md->bl, id, md->db->skill[idx].lv, false); - safestrncpy((char*)WFIFOP(fd,len+12), skill_get_name(id), NAME_LENGTH); + safestrncpy(WFIFOCP(fd,len+12), skill_get_name(id), NAME_LENGTH); WFIFOB(fd,len+36) = 0; // Skillable for Mercenary? len += 37; } @@ -16397,7 +16397,7 @@ void clif_bg_hp(struct map_session_data *sd) { WBUFW(buf,0) = cmd; WBUFL(buf,2) = sd->status.account_id; #if PACKETVER < 20140613 - safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), sd->status.name, NAME_LENGTH); if( sd->battle_status.max_hp > INT16_MAX ) { // To correctly display the %hp bar. [Skotlex] WBUFW(buf,30) = sd->battle_status.hp/(sd->battle_status.max_hp/100); WBUFW(buf,32) = 100; @@ -16427,7 +16427,7 @@ void clif_bg_xy(struct map_session_data *sd) WBUFW(buf,0)=0x2df; WBUFL(buf,2)=sd->status.account_id; - safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,6), sd->status.name, NAME_LENGTH); WBUFW(buf,30)=sd->status.class_; WBUFW(buf,32)=sd->bl.x; WBUFW(buf,34)=sd->bl.y; @@ -16465,7 +16465,7 @@ void clif_bg_message(struct battleground_data *bg, int src_id, const char *name, WBUFW(buf,0) = 0x2dc; WBUFW(buf,2) = len + NAME_LENGTH + 8; WBUFL(buf,4) = src_id; - safestrncpy((char*)WBUFP(buf,8), name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,8), name, NAME_LENGTH); memcpy(WBUFP(buf,32), mes, len); clif_send(buf,WBUFW(buf,2), &sd->bl, BG); @@ -16526,7 +16526,7 @@ void clif_sendbgemblem_area(struct map_session_data *sd) WBUFW(buf, 0) = 0x2dd; WBUFL(buf,2) = sd->bl.id; - safestrncpy((char*)WBUFP(buf,6), sd->status.name, NAME_LENGTH); // name don't show in screen. + safestrncpy(WBUFCP(buf,6), sd->status.name, NAME_LENGTH); // name don't show in screen. WBUFW(buf,30) = sd->bg_id; clif_send(buf,packet_len(0x2dd), &sd->bl, AREA); } @@ -16537,7 +16537,7 @@ void clif_sendbgemblem_single(int fd, struct map_session_data *sd) WFIFOHEAD(fd,32); WFIFOW(fd,0) = 0x2dd; WFIFOL(fd,2) = sd->bl.id; - safestrncpy((char*)WFIFOP(fd,6), sd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,6), sd->status.name, NAME_LENGTH); WFIFOW(fd,30) = sd->bg_id; WFIFOSET(fd,packet_len(0x2dd)); } @@ -16580,7 +16580,7 @@ void clif_instance_create(unsigned short instance_id, int num) return; WBUFW(buf,0) = 0x2cb; - safestrncpy((char *)WBUFP(buf,2), StringBuf_Value(db->name), INSTANCE_NAME_LENGTH); + safestrncpy(WBUFCP(buf,2), StringBuf_Value(db->name), INSTANCE_NAME_LENGTH); WBUFW(buf,63) = num; clif_send(buf,packet_len(0x2cb),&sd->bl,target); #endif @@ -16631,7 +16631,7 @@ void clif_instance_status(unsigned short instance_id, unsigned int limit1, unsig return; WBUFW(buf,0) = 0x2cd; - safestrncpy((char *)WBUFP(buf,2), StringBuf_Value(db->name), INSTANCE_NAME_LENGTH); + safestrncpy(WBUFCP(buf,2), StringBuf_Value(db->name), INSTANCE_NAME_LENGTH); WBUFL(buf,63) = limit1; WBUFL(buf,67) = limit2; clif_send(buf,packet_len(0x2cd),&sd->bl,target); @@ -16892,7 +16892,7 @@ static void clif_parse_ReqOpenBuyingStore(int fd, struct map_session_data* sd) zenylimit = RFIFOL(fd,info->pos[1]); result = RFIFOL(fd,info->pos[2]); - safestrncpy(storename, (const char*)RFIFOP(fd,info->pos[3]), sizeof(storename)); + safestrncpy(storename, RFIFOCP(fd,info->pos[3]), sizeof(storename)); itemlist = RFIFOP(fd,info->pos[4]); // so that buyingstore_create knows, how many elements it has access to @@ -17749,8 +17749,8 @@ void clif_ackworldinfo(struct map_session_data* sd) { WFIFOHEAD(fd,packet_len(0x979)); WFIFOW(fd,0)=0x979; //AID -> world name ? - safestrncpy((char*)WFIFOP(fd,2), "" /* World name */, 24); - safestrncpy((char*)WFIFOP(fd,26), sd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(fd,2), "" /* World name */, 24); + safestrncpy(WFIFOCP(fd,26), sd->status.name, NAME_LENGTH); WFIFOSET(fd,packet_len(0x979)); } @@ -18124,7 +18124,7 @@ void clif_showscript(struct block_list* bl, const char* message) { WBUFW(buf,0) = 0x8b3; WBUFW(buf,2) = (uint16)(len+8); WBUFL(buf,4) = bl->id; - safestrncpy((char *) WBUFP(buf,8), message, len); + safestrncpy(WBUFCP(buf,8), message, len); clif_send((unsigned char *) buf, WBUFW(buf,2), bl, AREA); } @@ -18662,7 +18662,7 @@ void clif_broadcast_obtain_special_item(const char *char_name, unsigned short na WBUFB(buf, 4) = type; WBUFW(buf, 5) = nameid; WBUFB(buf, 7) = NAME_LENGTH; - safestrncpy((char *)WBUFP(buf, 8), char_name, NAME_LENGTH); + safestrncpy(WBUFCP(buf, 8), char_name, NAME_LENGTH); switch (type) { case ITEMOBTAIN_TYPE_BOXITEM: @@ -18676,7 +18676,7 @@ void clif_broadcast_obtain_special_item(const char *char_name, unsigned short na struct mob_db *db = mob_db(container); WBUFW(buf, 2) = 9 + NAME_LENGTH * 2; WBUFB(buf, 8 + NAME_LENGTH) = NAME_LENGTH; - safestrncpy((char *)WBUFP(buf, 9 + NAME_LENGTH), db->name, NAME_LENGTH); + safestrncpy(WBUFCP(buf, 9 + NAME_LENGTH), db->name, NAME_LENGTH); } break; @@ -18759,7 +18759,7 @@ void clif_navigateTo(struct map_session_data *sd, const char* mapname, uint16 x, // If this flag is set, the navigation window will not be opened up WFIFOB(fd,4) = hideWindow; // Target map - safestrncpy( (char*)WFIFOP(fd,5),mapname,MAP_NAME_LENGTH_EXT); + safestrncpy( WFIFOCP(fd,5),mapname,MAP_NAME_LENGTH_EXT); // Target x WFIFOW(fd,21) = x; // Target y diff --git a/src/map/intif.c b/src/map/intif.c index 59eb4c1c7d..507affd741 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -400,7 +400,7 @@ int intif_saveregistry(struct map_session_data *sd) WFIFOB(inter_fd, plen) = (unsigned char)len; // won't be higher; the column size is 32 plen += 1; - safestrncpy((char*)WFIFOP(inter_fd,plen), varname, len); + safestrncpy(WFIFOCP(inter_fd,plen), varname, len); plen += len; WFIFOL(inter_fd, plen) = script_getvaridx(key.i64); @@ -418,7 +418,7 @@ int intif_saveregistry(struct map_session_data *sd) WFIFOB(inter_fd, plen) = (unsigned char)len; // won't be higher; the column size is 254 plen += 1; - safestrncpy((char*)WFIFOP(inter_fd,plen), p->value, len); + safestrncpy(WFIFOCP(inter_fd,plen), p->value, len); plen += len; } else { script_reg_destroy_single(sd,key.i64,&p->flag); @@ -629,7 +629,7 @@ int intif_party_leave(int party_id, uint32 account_id, uint32 char_id, char *nam WFIFOL(inter_fd,2) = party_id; WFIFOL(inter_fd,6) = account_id; WFIFOL(inter_fd,10) = char_id; - memcpy((char *)WFIFOP(inter_fd,14), name, NAME_LENGTH); + memcpy(WFIFOCP(inter_fd,14), name, NAME_LENGTH); WFIFOB(inter_fd,14+NAME_LENGTH) = type; WFIFOSET(inter_fd,15+NAME_LENGTH); return 1; @@ -844,7 +844,7 @@ int intif_guild_leave(int guild_id,uint32 account_id,uint32 char_id,int flag,con WFIFOL(inter_fd, 6) = account_id; WFIFOL(inter_fd,10) = char_id; WFIFOB(inter_fd,14) = flag; - safestrncpy((char*)WFIFOP(inter_fd,15),mes,40); + safestrncpy(WFIFOCP(inter_fd,15),mes,40); WFIFOSET(inter_fd,55); return 1; } @@ -1212,7 +1212,7 @@ int intif_parse_WisMessage(int fd) id=RFIFOL(fd,4); - safestrncpy(name, (char*)RFIFOP(fd,32), NAME_LENGTH); + safestrncpy(name, RFIFOCP(fd,32), NAME_LENGTH); sd = map_nick2sd(name); if(sd == NULL || strcmp(sd->status.name, name) != 0) { //Not found @@ -1223,7 +1223,7 @@ int intif_parse_WisMessage(int fd) intif_wis_replay(id, 2); return 0; } - wisp_source = (char *) RFIFOP(fd,8); // speed up [Yor] + wisp_source = RFIFOCP(fd,8); // speed up [Yor] for(i=0; i < MAX_IGNORE_LIST && sd->ignore[i].name[0] != '\0' && strcmp(sd->ignore[i].name, wisp_source) != 0 @@ -1235,7 +1235,7 @@ int intif_parse_WisMessage(int fd) return 0; } //Success to send whisper. - clif_wis_message(sd->fd, wisp_source, (char*)RFIFOP(fd,56),RFIFOW(fd,2)-56); + clif_wis_message(sd->fd, wisp_source, RFIFOCP(fd,56),RFIFOW(fd,2)-56); intif_wis_replay(id,0); // success return 1; } @@ -1251,7 +1251,7 @@ int intif_parse_WisEnd(int fd) if (battle_config.etc_log) ShowInfo("intif_parse_wisend: player: %s, flag: %d\n", RFIFOP(fd,2), RFIFOB(fd,26)); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target - sd = (struct map_session_data *)map_nick2sd((char *) RFIFOP(fd,2)); + sd = (struct map_session_data *)map_nick2sd(RFIFOCP(fd,2)); if (sd != NULL) clif_wis_end(sd->fd, RFIFOB(fd,26)); @@ -1298,8 +1298,8 @@ int mapif_parse_WisToGM(int fd) message = (char *) aMalloc(mes_len+1); permission = RFIFOL(fd,4+NAME_LENGTH); - safestrncpy(Wisp_name, (char*)RFIFOP(fd,4), NAME_LENGTH); - safestrncpy(message, (char*)RFIFOP(fd,8+NAME_LENGTH), mes_len+1); + safestrncpy(Wisp_name, RFIFOCP(fd,4), NAME_LENGTH); + safestrncpy(message, RFIFOCP(fd,8+NAME_LENGTH), mes_len+1); // information is sent to all online GM map_foreachpc(mapif_parse_WisToGM_sub, permission, Wisp_name, message, mes_len); aFree(message); @@ -1365,13 +1365,13 @@ void intif_parse_Registers(int fd) if (type) { for(i = 0; i < max; i++) { char sval[254]; - safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(key, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; index = RFIFOL(fd, cursor); cursor += 4; - safestrncpy(sval, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(sval, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; set_reg(NULL,sd,reference_uid(add_str(key), index), key, (void*)sval, NULL); @@ -1385,7 +1385,7 @@ void intif_parse_Registers(int fd) } else { for(i = 0; i < max; i++) { int ival; - safestrncpy(key, (char*)RFIFOP(fd, cursor + 1), RFIFOB(fd, cursor)); + safestrncpy(key, RFIFOCP(fd, cursor + 1), RFIFOB(fd, cursor)); cursor += RFIFOB(fd, cursor) + 1; index = RFIFOL(fd, cursor); @@ -1474,7 +1474,7 @@ int intif_parse_PartyCreated(int fd) { if(battle_config.etc_log) ShowInfo("intif: party created by account %d\n\n", RFIFOL(fd,2)); - party_created(RFIFOL(fd,2), RFIFOL(fd,6),RFIFOB(fd,10),RFIFOL(fd,11), (char *)RFIFOP(fd,15)); + party_created(RFIFOL(fd,2), RFIFOL(fd,6),RFIFOB(fd,10),RFIFOL(fd,11), RFIFOCP(fd,15)); return 1; } @@ -1529,8 +1529,8 @@ int intif_parse_PartyOptionChanged(int fd) int intif_parse_PartyMemberWithdraw(int fd) { if(battle_config.etc_log) - ShowInfo("intif: party member withdraw: Type(%d) Party(%d), Account(%d), Char(%d), Name(%s)\n",RFIFOB(fd,14+NAME_LENGTH),RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),(char*)RFIFOP(fd,14)); - party_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),(char*)RFIFOP(fd,14),(enum e_party_member_withdraw)RFIFOB(fd,14+NAME_LENGTH)); + ShowInfo("intif: party member withdraw: Type(%d) Party(%d), Account(%d), Char(%d), Name(%s)\n",RFIFOB(fd,14+NAME_LENGTH),RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOCP(fd,14)); + party_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOCP(fd,14),(enum e_party_member_withdraw)RFIFOB(fd,14+NAME_LENGTH)); return 1; } @@ -1563,7 +1563,7 @@ int intif_parse_PartyMove(int fd) */ int intif_parse_PartyMessage(int fd) { - party_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),(char *) RFIFOP(fd,12),RFIFOW(fd,2)-12); + party_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),RFIFOCP(fd,12),RFIFOW(fd,2)-12); return 1; } @@ -1616,7 +1616,7 @@ int intif_parse_GuildMemberAdded(int fd) */ int intif_parse_GuildMemberWithdraw(int fd) { - guild_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),(char *)RFIFOP(fd,55),(char *)RFIFOP(fd,15)); + guild_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOCP(fd,55),RFIFOCP(fd,15)); return 1; } @@ -1737,7 +1737,7 @@ int intif_parse_GuildSkillUp(int fd) */ int intif_parse_GuildAlliance(int fd) { - guild_allianceack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18),(char *) RFIFOP(fd,19),(char *) RFIFOP(fd,43)); + guild_allianceack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18),RFIFOCP(fd,19),RFIFOCP(fd,43)); return 1; } @@ -1748,7 +1748,7 @@ int intif_parse_GuildAlliance(int fd) */ int intif_parse_GuildNotice(int fd) { - guild_notice_changed(RFIFOL(fd,2),(char *) RFIFOP(fd,6),(char *) RFIFOP(fd,66)); + guild_notice_changed(RFIFOL(fd,2),RFIFOCP(fd,6),RFIFOCP(fd,66)); return 1; } @@ -1759,7 +1759,7 @@ int intif_parse_GuildNotice(int fd) */ int intif_parse_GuildEmblem(int fd) { - guild_emblem_changed(RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8), (char *)RFIFOP(fd,12)); + guild_emblem_changed(RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8), RFIFOCP(fd,12)); return 1; } @@ -1770,7 +1770,7 @@ int intif_parse_GuildEmblem(int fd) */ int intif_parse_GuildMessage(int fd) { - guild_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),(char *) RFIFOP(fd,12),RFIFOW(fd,2)-12); + guild_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),RFIFOCP(fd,12),RFIFOW(fd,2)-12); return 1; } @@ -1869,10 +1869,10 @@ int intif_parse_ChangeNameOk(int fd) case 0: //Players [NOT SUPPORTED YET] break; case 1: //Pets - pet_change_name_ack(sd, (char*)RFIFOP(fd,12), RFIFOB(fd,11)); + pet_change_name_ack(sd, RFIFOCP(fd,12), RFIFOB(fd,11)); break; case 2: //Hom - hom_change_name_ack(sd, (char*)RFIFOP(fd,12), RFIFOB(fd,11)); + hom_change_name_ack(sd, RFIFOCP(fd,12), RFIFOB(fd,11)); break; } return 1; @@ -2374,8 +2374,8 @@ static void intif_parse_Mail_new(int fd) { struct map_session_data *sd = map_charid2sd(RFIFOL(fd,2)); int mail_id = RFIFOL(fd,6); - const char* sender_name = (char*)RFIFOP(fd,10); - const char* title = (char*)RFIFOP(fd,34); + const char* sender_name = RFIFOCP(fd,10); + const char* title = RFIFOCP(fd,34); if( sd == NULL ) return; @@ -2913,7 +2913,7 @@ int intif_request_accinfo(int u_fd, int aid, int group_lv, char* query, char typ WFIFOL(inter_fd,6) = aid; WFIFOL(inter_fd,10) = group_lv; WFIFOB(inter_fd,14) = type; - safestrncpy((char *)WFIFOP(inter_fd,15), query, NAME_LENGTH); + safestrncpy(WFIFOCP(inter_fd,15), query, NAME_LENGTH); WFIFOSET(inter_fd,2 + 4 + 4 + 4 + 1 + NAME_LENGTH); return 1; @@ -2927,7 +2927,7 @@ void intif_parse_accinfo_ack( int fd ) { char acc_name[NAME_LENGTH]; int u_fd = RFIFOL(fd,2); int acc_id = RFIFOL(fd,6); - safestrncpy(acc_name, (char*)RFIFOP(fd,10), NAME_LENGTH); + safestrncpy(acc_name, RFIFOCP(fd,10), NAME_LENGTH); clif_account_name(u_fd, acc_id, acc_name); } @@ -2944,7 +2944,7 @@ void intif_parse_MessageToFD(int fd) { /* matching e.g. previous fd owner didn't dc during request or is still the same */ if( sd->bl.id == aid ) { char msg[512]; - safestrncpy(msg, (char*)RFIFOP(fd,12), RFIFOW(fd,2) - 12); + safestrncpy(msg, RFIFOCP(fd,12), RFIFOW(fd,2) - 12); clif_displaymessage(u_fd,msg); } @@ -2988,7 +2988,7 @@ int intif_broadcast_obtain_special_item(struct map_session_data *sd, unsigned sh WFIFOW(inter_fd, 4) = nameid; WFIFOW(inter_fd, 6) = sourceid; WFIFOB(inter_fd, 8) = type; - safestrncpy((char *)WFIFOP(inter_fd, 9), sd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(inter_fd, 9), sd->status.name, NAME_LENGTH); WFIFOSET(inter_fd, WFIFOW(inter_fd, 2)); return 1; @@ -3021,8 +3021,8 @@ int intif_broadcast_obtain_special_item_npc(struct map_session_data *sd, unsigne WFIFOW(inter_fd, 4) = nameid; WFIFOW(inter_fd, 6) = 0; WFIFOB(inter_fd, 8) = ITEMOBTAIN_TYPE_NPC; - safestrncpy((char *)WFIFOP(inter_fd, 9), sd->status.name, NAME_LENGTH); - safestrncpy((char *)WFIFOP(inter_fd, 9 + NAME_LENGTH), srcname, NAME_LENGTH); + safestrncpy(WFIFOCP(inter_fd, 9), sd->status.name, NAME_LENGTH); + safestrncpy(WFIFOCP(inter_fd, 9 + NAME_LENGTH), srcname, NAME_LENGTH); WFIFOSET(inter_fd, WFIFOW(inter_fd, 2)); return 1; @@ -3037,9 +3037,9 @@ void intif_parse_broadcast_obtain_special_item(int fd) { int type = RFIFOB(fd, 8); char name[NAME_LENGTH], srcname[NAME_LENGTH]; - safestrncpy(name, (char *)RFIFOP(fd, 9), NAME_LENGTH); + safestrncpy(name, RFIFOCP(fd, 9), NAME_LENGTH); if (type == ITEMOBTAIN_TYPE_NPC) - safestrncpy(name, (char *)RFIFOP(fd, 9 + NAME_LENGTH), NAME_LENGTH); + safestrncpy(name, RFIFOCP(fd, 9 + NAME_LENGTH), NAME_LENGTH); clif_broadcast_obtain_special_item(name, RFIFOW(fd, 4), RFIFOW(fd, 6), (enum BROADCASTING_SPECIAL_ITEM_OBTAIN)type, srcname); } @@ -3150,9 +3150,9 @@ int intif_parse(int fd) switch(cmd){ case 0x3800: if (RFIFOL(fd,4) == 0xFF000000) //Normal announce. - clif_broadcast(NULL, (char *) RFIFOP(fd,16), packet_len-16, BC_DEFAULT, ALL_CLIENT); + clif_broadcast(NULL, RFIFOCP(fd,16), packet_len-16, BC_DEFAULT, ALL_CLIENT); else //Color announce. - clif_broadcast2(NULL, (char *) RFIFOP(fd,16), packet_len-16, RFIFOL(fd,4), RFIFOW(fd,8), RFIFOW(fd,10), RFIFOW(fd,12), RFIFOW(fd,14), ALL_CLIENT); + clif_broadcast2(NULL, RFIFOCP(fd,16), packet_len-16, RFIFOL(fd,4), RFIFOW(fd,8), RFIFOW(fd,10), RFIFOW(fd,12), RFIFOW(fd,14), ALL_CLIENT); break; case 0x3801: intif_parse_WisMessage(fd); break; case 0x3802: intif_parse_WisEnd(fd); break; From e93c8880b33333bb549b1e088c844393478bbc33 Mon Sep 17 00:00:00 2001 From: Aleos <aleos89@users.noreply.github.com> Date: Tue, 18 Oct 2016 17:59:32 -0400 Subject: [PATCH 15/67] Updated Manhole skill behavior (#1617) * Updated Manhole skill behavior * Fixes #1601 * GvG and Battleground monster objects are not able to be targeted by Manhole. * Removed the usage of Strip Accessory on targets who are affected by Manhole. Thanks to @ignizh! --- db/pre-re/skill_db.txt | 2 +- db/re/skill_db.txt | 2 +- src/map/status.c | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 1eaa5287b6..0e30424fc2 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -1087,7 +1087,7 @@ 2295,3,6,1,0,0x1,0,3,1,yes,0,0,0,none,0,0x0, SC_LAZINESS,Masquerade - Laziness 2296,3,6,1,0,0x1,0,3,1,yes,0,0,0,none,0,0x0, SC_UNLUCKY,Masquerade - Unlucky 2297,3,6,1,0,0x1,0,3,1,yes,0,0,0,none,0,0x0, SC_WEAKNESS,Masquerade - Weakness -2298,3,6,1,0,0x1,0,5,1,yes,0,0,0,none,0,0x8000, SC_STRIPACCESSARY,Strip Accessory +2298,3,6,1,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, SC_STRIPACCESSARY,Strip Accessory 2299,7,6,2,0,0x1,0,3,1,yes,0,0,3,magic,0,0x0, SC_MANHOLE,Man Hole 2300,7,6,2,0,0x1,0,3,1,yes,0,0,1,magic,0,0x0, SC_DIMENSIONDOOR,Dimension Door 2301,7,6,2,0,0x1,0,3,1,yes,0,0x20000,0,magic,0,0x0, SC_CHAOSPANIC,Chaos Panic diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index f061e3216b..01e10f513f 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -1087,7 +1087,7 @@ 2295,3,6,1,0,0x1,0,3,1,yes,0,0,0,none,0,0x0, SC_LAZINESS,Masquerade - Laziness 2296,3,6,1,0,0x1,0,3,1,yes,0,0,0,none,0,0x0, SC_UNLUCKY,Masquerade - Unlucky 2297,3,6,1,0,0x1,0,3,1,yes,0,0,0,none,0,0x0, SC_WEAKNESS,Masquerade - Weakness -2298,3,6,1,0,0x1,0,5,1,yes,0,0,0,none,0,0x8000, SC_STRIPACCESSARY,Strip Accessory +2298,3,6,1,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, SC_STRIPACCESSARY,Strip Accessory 2299,7,6,2,0,0x1,0,3,1,yes,0,0,3,magic,0,0x0, SC_MANHOLE,Man Hole 2300,7,6,2,0,0x1,0,3,1,yes,0,0,1,magic,0,0x0, SC_DIMENSIONDOOR,Dimension Door 2301,7,6,2,0,0x1,0,3,1,yes,0,0x20000,0,magic,0,0x0, SC_CHAOSPANIC,Chaos Panic diff --git a/src/map/status.c b/src/map/status.c index 883c65aa08..ce4d27787b 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2010,6 +2010,10 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui && (src->type != BL_PC || ((TBL_PC*)src)->skillitem != skill_id)) return false; break; + case SC_MANHOLE: + // Skill is disabled against special racial grouped monsters(GvG and Battleground) + if (status_get_race2(target) == RC2_GVG || status_get_race2(target) == RC2_BATTLEFIELD) + return false; default: break; } From 655d6f56e778c28a57d18a61b0b6ab94b66cff95 Mon Sep 17 00:00:00 2001 From: Temtaime <temtaime@gmail.com> Date: Wed, 19 Oct 2016 12:35:12 +0300 Subject: [PATCH 16/67] Fix type in warning message --- src/char/char_logif.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/char/char_logif.c b/src/char/char_logif.c index 50f03ed630..2cfc00030a 100644 --- a/src/char/char_logif.c +++ b/src/char/char_logif.c @@ -315,7 +315,7 @@ int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd){ sd->version = version; sd->clienttype = clienttype; if(sd->version != date2version(PACKETVER)) - ShowWarning("s aid=%d has an incorect version=%d in clientinfo. Server compiled for %d\n", + ShowWarning("aid=%d has an incorect version=%d in clientinfo. Server compiled for %d\n", sd->account_id,sd->version,date2version(PACKETVER)); switch( result ) From b2f0ffb9475b0f2edb931379f9268c460ac9b310 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Wed, 19 Oct 2016 12:24:46 +0200 Subject: [PATCH 17/67] Fixed a potential server crash in mob_chat_db Fixes #1635 Thanks to @Temtaime --- src/map/mob.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/mob.c b/src/map/mob.c index 950a2b5a20..f629a8cf39 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -4273,7 +4273,7 @@ static bool mob_parse_row_chatdb(char* fields[], int columns, int current) msg_id = atoi(fields[0]); if (msg_id <= 0 || msg_id > MAX_MOB_CHAT){ - ShowError("mob_parse_row_chatdb: Invalid chat ID: %d at %s, line %d\n", msg_id, columns, current); + ShowError("mob_parse_row_chatdb: Invalid chat ID '%d' in line %d\n", msg_id, current); return false; } From 4db687c7a41bef7e4310bdb8480972cd2eb52a97 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Wed, 19 Oct 2016 14:42:25 +0200 Subject: [PATCH 18/67] Fixed unknown state handling in mob skills --- src/map/mob.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map/mob.c b/src/map/mob.c index 950a2b5a20..b0824953fd 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -4435,8 +4435,8 @@ static bool mob_parse_row_mobskilldb(char** str, int columns, int current) if( j < ARRAYLENGTH(state) ) ms->state = state[j].id; else { - ShowWarning("mob_parse_row_mobskilldb: Unrecognized state %s\n", str[2]); - ms->state = MSS_ANY; + ShowError("mob_parse_row_mobskilldb: Unrecognized state '%s' in line %d\n", str[2], current); + return false; } //Skill ID From 15b40509d693e2d3e9c54e37ffabdbe39949aceb Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Tue, 18 Oct 2016 22:38:57 +0200 Subject: [PATCH 19/67] Added a -D equivalent for msbuild Fixes appveyor not building in pre-renewal mode --- vcproj-10/char-server.vcxproj | 2 +- vcproj-10/login-server.vcxproj | 2 +- vcproj-10/map-server.vcxproj | 2 +- vcproj-10/mapcache.vcxproj | 2 +- vcproj-12/char-server.vcxproj | 2 +- vcproj-12/login-server.vcxproj | 2 +- vcproj-12/map-server.vcxproj | 2 +- vcproj-12/mapcache.vcxproj | 2 +- vcproj-13/char-server.vcxproj | 2 +- vcproj-13/login-server.vcxproj | 2 +- vcproj-13/map-server.vcxproj | 2 +- vcproj-13/mapcache.vcxproj | 2 +- vcproj-14/char-server.vcxproj | 2 +- vcproj-14/login-server.vcxproj | 2 +- vcproj-14/map-server.vcxproj | 2 +- vcproj-14/mapcache.vcxproj | 2 +- vcproj-9/char-server.vcproj | 2 +- vcproj-9/dbghelpplug.vcproj | 2 +- vcproj-9/login-server.vcproj | 2 +- vcproj-9/map-server.vcproj | 2 +- vcproj-9/mapcache.vcproj | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/vcproj-10/char-server.vcxproj b/vcproj-10/char-server.vcxproj index bf01b6f612..529d71c815 100644 --- a/vcproj-10/char-server.vcxproj +++ b/vcproj-10/char-server.vcxproj @@ -54,7 +54,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-10/login-server.vcxproj b/vcproj-10/login-server.vcxproj index 0f32beeefe..400fd07725 100644 --- a/vcproj-10/login-server.vcxproj +++ b/vcproj-10/login-server.vcxproj @@ -52,7 +52,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-10/map-server.vcxproj b/vcproj-10/map-server.vcxproj index 641c198152..d5b70e8ab6 100644 --- a/vcproj-10/map-server.vcxproj +++ b/vcproj-10/map-server.vcxproj @@ -51,7 +51,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;..\3rdparty\libconfig;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-10/mapcache.vcxproj b/vcproj-10/mapcache.vcxproj index f2f5fec954..6961430ba7 100644 --- a/vcproj-10/mapcache.vcxproj +++ b/vcproj-10/mapcache.vcxproj @@ -50,7 +50,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-12/char-server.vcxproj b/vcproj-12/char-server.vcxproj index 41a156a497..513abfcb23 100644 --- a/vcproj-12/char-server.vcxproj +++ b/vcproj-12/char-server.vcxproj @@ -55,7 +55,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-12/login-server.vcxproj b/vcproj-12/login-server.vcxproj index a81a494c9b..7c1d822b57 100644 --- a/vcproj-12/login-server.vcxproj +++ b/vcproj-12/login-server.vcxproj @@ -54,7 +54,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-12/map-server.vcxproj b/vcproj-12/map-server.vcxproj index 9860aeb46a..2b7bc547f6 100644 --- a/vcproj-12/map-server.vcxproj +++ b/vcproj-12/map-server.vcxproj @@ -53,7 +53,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;..\3rdparty\libconfig;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-12/mapcache.vcxproj b/vcproj-12/mapcache.vcxproj index 32f6a3418d..0f35d43367 100644 --- a/vcproj-12/mapcache.vcxproj +++ b/vcproj-12/mapcache.vcxproj @@ -52,7 +52,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-13/char-server.vcxproj b/vcproj-13/char-server.vcxproj index e5953aa8e9..0a1f6bb18b 100644 --- a/vcproj-13/char-server.vcxproj +++ b/vcproj-13/char-server.vcxproj @@ -54,7 +54,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-13/login-server.vcxproj b/vcproj-13/login-server.vcxproj index df475f889e..d02ccc0642 100644 --- a/vcproj-13/login-server.vcxproj +++ b/vcproj-13/login-server.vcxproj @@ -54,7 +54,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-13/map-server.vcxproj b/vcproj-13/map-server.vcxproj index 55b9440719..bef575b8e2 100644 --- a/vcproj-13/map-server.vcxproj +++ b/vcproj-13/map-server.vcxproj @@ -53,7 +53,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;..\3rdparty\libconfig;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-13/mapcache.vcxproj b/vcproj-13/mapcache.vcxproj index a5e7b8639d..a977aa5af9 100644 --- a/vcproj-13/mapcache.vcxproj +++ b/vcproj-13/mapcache.vcxproj @@ -52,7 +52,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-14/char-server.vcxproj b/vcproj-14/char-server.vcxproj index 46e2cd9863..6f56ed6467 100644 --- a/vcproj-14/char-server.vcxproj +++ b/vcproj-14/char-server.vcxproj @@ -54,7 +54,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-14/login-server.vcxproj b/vcproj-14/login-server.vcxproj index 4aa321e28d..1d9f5aa7d7 100644 --- a/vcproj-14/login-server.vcxproj +++ b/vcproj-14/login-server.vcxproj @@ -54,7 +54,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;WITH_SQL;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-14/map-server.vcxproj b/vcproj-14/map-server.vcxproj index 9fd854c7e0..afe2617bd2 100644 --- a/vcproj-14/map-server.vcxproj +++ b/vcproj-14/map-server.vcxproj @@ -53,7 +53,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar;..\3rdparty\libconfig;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-14/mapcache.vcxproj b/vcproj-14/mapcache.vcxproj index 94283a8a64..b26ffc9133 100644 --- a/vcproj-14/mapcache.vcxproj +++ b/vcproj-14/mapcache.vcxproj @@ -52,7 +52,7 @@ <ClCompile> <Optimization>Disabled</Optimization> <AdditionalIncludeDirectories>..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <PreprocessorDefinitions>$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessToFile>false</PreprocessToFile> <PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers> <ExceptionHandling> diff --git a/vcproj-9/char-server.vcproj b/vcproj-9/char-server.vcproj index 1ae42e6e3d..d4dedd43c3 100644 --- a/vcproj-9/char-server.vcproj +++ b/vcproj-9/char-server.vcproj @@ -44,7 +44,7 @@ AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar" - PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST" + PreprocessorDefinitions="$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST" GeneratePreprocessedFile="0" ExceptionHandling="0" BasicRuntimeChecks="3" diff --git a/vcproj-9/dbghelpplug.vcproj b/vcproj-9/dbghelpplug.vcproj index 164e7424cf..35e731df72 100644 --- a/vcproj-9/dbghelpplug.vcproj +++ b/vcproj-9/dbghelpplug.vcproj @@ -41,7 +41,7 @@ <Tool Name="VCCLCompilerTool" Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DBGHELPPLUG_EXPORTS" + PreprocessorDefinitions="$(DefineConstants);WIN32;_DEBUG;_WINDOWS;_USRDLL;DBGHELPPLUG_EXPORTS" StringPooling="false" MinimalRebuild="true" ExceptionHandling="0" diff --git a/vcproj-9/login-server.vcproj b/vcproj-9/login-server.vcproj index 9264029991..90cfa2461b 100644 --- a/vcproj-9/login-server.vcproj +++ b/vcproj-9/login-server.vcproj @@ -44,7 +44,7 @@ AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar" - PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;WITH_SQL" + PreprocessorDefinitions="$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST;WITH_SQL" GeneratePreprocessedFile="0" ExceptionHandling="0" BasicRuntimeChecks="3" diff --git a/vcproj-9/map-server.vcproj b/vcproj-9/map-server.vcproj index 4f3c343921..f6f84acab3 100644 --- a/vcproj-9/map-server.vcproj +++ b/vcproj-9/map-server.vcproj @@ -43,7 +43,7 @@ AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\3rdparty\libconfig;..\3rdparty\mysql\include;..\3rdparty\zlib\include;..\3rdparty\pcre\include;..\3rdparty\msinttypes\include;..\3rdparty\mt19937ar" - PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST" + PreprocessorDefinitions="$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;PCRE_SUPPORT;FD_SETSIZE=4096;LIBCONFIG_STATIC;YY_USE_CONST" GeneratePreprocessedFile="0" ExceptionHandling="0" BasicRuntimeChecks="3" diff --git a/vcproj-9/mapcache.vcproj b/vcproj-9/mapcache.vcproj index 45d40a0040..d2623fac5b 100644 --- a/vcproj-9/mapcache.vcproj +++ b/vcproj-9/mapcache.vcproj @@ -43,7 +43,7 @@ AdditionalOptions="/MP" Optimization="0" AdditionalIncludeDirectories="..\3rdparty\libconfig;..\3rdparty\zlib\include;..\3rdparty\msinttypes\include" - PreprocessorDefinitions="WIN32;_WIN32;__WIN32;_DEBUG;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST" + PreprocessorDefinitions="$(DefineConstants);WIN32;_WIN32;__WIN32;_DEBUG;MINICORE;LIBCONFIG_STATIC;YY_USE_CONST" GeneratePreprocessedFile="0" ExceptionHandling="0" BasicRuntimeChecks="3" From 3108bb12652972a2bc18aaafb4c781c6d2bb9d6d Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Tue, 18 Oct 2016 22:02:08 +0200 Subject: [PATCH 20/67] Added a configure option for vip features Added the new option to the CI matrix --- .travis.yml | 7 +++++-- configure | 36 ++++++++++++++++++++++++++++++++++++ configure.in | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 452a579aec..9fc6129b32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,8 +41,11 @@ env: - DB_PASS="ragnarok" - PACKETDBVER=45 matrix: - - CONFIGURE_FLAGS="--enable-prere=no" - - CONFIGURE_FLAGS="--enable-prere=yes" + matrix: + - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no" + - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no" + - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=yes" + - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=yes" notifications: email: false diff --git a/configure b/configure index ac712aadba..c39bcf3a43 100755 --- a/configure +++ b/configure @@ -696,6 +696,7 @@ enable_manager enable_packetver enable_debug enable_prere +enable_vip enable_warn enable_buildbot enable_rdtsc @@ -1335,6 +1336,8 @@ Optional Features: (available options: yes, no, gdb) --enable-prere[=ARG] Compiles serv in prere mode. (disabled by default) (available options: yes, no) + --enable-vip[=ARG] Compiles serv with vip features. (disabled by default) + (available options: yes, no) --enable-warn[=ARG] Compiles with warnings. (disabled by default) (available options: yes, no, extra) --enable-buildbot[=ARG] (available options: yes, no) @@ -3506,6 +3509,26 @@ fi +# +# VIP +# +# Check whether --enable-vip was given. +if test "${enable_vip+set}" = set; then : + enableval=$enable_vip; + enable_vip="$enableval" + case $enableval in + "no");; + "yes");; + *) as_fn_error $? "invalid argument --enable-vip=$enableval... stopping" "$LINENO" 5;; + esac + +else + enable_vip="no" + +fi + + + # # warn # @@ -6334,6 +6357,19 @@ case $enable_prere in ;; esac +# +# VIP +# +case $enable_vip in + "no") + # default value + CPPFLAGS="$CPPFLAGS" + ;; + "yes") + CPPFLAGS="$CPPFLAGS -DVIP_ENABLE" + ;; +esac + # # Warnings # diff --git a/configure.in b/configure.in index 3d55d504f0..9ce551c468 100644 --- a/configure.in +++ b/configure.in @@ -100,6 +100,30 @@ AC_ARG_ENABLE( ) +# +# VIP +# +AC_ARG_ENABLE( + [vip], + AC_HELP_STRING( + [--enable-vip@<:@=ARG@:>@], + [ + Compiles serv with vip features. (disabled by default) + (available options: yes, no) + ] + ), + [ + enable_vip="$enableval" + case $enableval in + "no");; + "yes");; + *) AC_MSG_ERROR([[invalid argument --enable-vip=$enableval... stopping]]);; + esac + ], + [enable_vip="no"] +) + + # # warn # @@ -999,6 +1023,19 @@ case $enable_prere in ;; esac +# +# VIP +# +case $enable_vip in + "no") + # default value + CPPFLAGS="$CPPFLAGS" + ;; + "yes") + CPPFLAGS="$CPPFLAGS -DVIP_ENABLE" + ;; +esac + # # Warnings # From dd555926a08cfa5a9658e62dbd919701802e4e82 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Wed, 19 Oct 2016 23:58:29 +0200 Subject: [PATCH 21/67] Reenabled buildbot defines Now builds will fail if any warnings or errors occur. Removed duplicated "matrix" keyword I added accidentally in 3108bb1. Removed a default warning in run once mode in the character server. Follow up to a0b3e51 --- .travis.yml | 9 ++++----- appveyor.yml | 12 ++++++++---- src/char/char.c | 3 ++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9fc6129b32..307aa40d55 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,11 +41,10 @@ env: - DB_PASS="ragnarok" - PACKETDBVER=45 matrix: - matrix: - - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no" - - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no" - - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=yes" - - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=yes" + - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no --enable_buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no --enable_buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=yes --enable_buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=yes --enable_buildbot=yes" notifications: email: false diff --git a/appveyor.yml b/appveyor.yml index 30d955fa7e..b9cd111d12 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,24 +10,28 @@ environment: matrix: - VisualStudioVersion: 10.0 Solution: rAthena-10.sln + Defines: "BUILDBOT" - VisualStudioVersion: 11.0 Solution: rAthena-12.sln + Defines: "BUILDBOT" - VisualStudioVersion: 12.0 Solution: rAthena-13.sln + Defines: "BUILDBOT" - VisualStudioVersion: 14.0 Solution: rAthena-14.sln + Defines: "BUILDBOT" - VisualStudioVersion: 10.0 Solution: rAthena-10.sln - Defines: PRERE + Defines: "BUILDBOT;PRERE" - VisualStudioVersion: 11.0 Solution: rAthena-12.sln - Defines: PRERE + Defines: "BUILDBOT;PRERE" - VisualStudioVersion: 12.0 Solution: rAthena-13.sln - Defines: PRERE + Defines: "BUILDBOT;PRERE" - VisualStudioVersion: 14.0 Solution: rAthena-14.sln - Defines: PRERE + Defines: "BUILDBOT;PRERE" platform: - Win32 configuration: diff --git a/src/char/char.c b/src/char/char.c index fd1b156667..28411eebd8 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -3190,7 +3190,8 @@ int do_init(int argc, char **argv) char_sql_config_read(SQL_CONF_NAME); msg_config_read(MSG_CONF_NAME_EN); - if (strcmp(charserv_config.userid, "s1")==0 && strcmp(charserv_config.passwd, "p1")==0) { + // Skip this check if the server is run with run-once flag + if (runflag!=CORE_ST_STOP && strcmp(charserv_config.userid, "s1")==0 && strcmp(charserv_config.passwd, "p1")==0) { ShowWarning("Using the default user/password s1/p1 is NOT RECOMMENDED.\n"); ShowNotice("Please edit your 'login' table to create a proper inter-server user/password (gender 'S')\n"); ShowNotice("And then change the user/password to use in conf/char_athena.conf (or conf/import/char_conf.txt)\n"); From abd98090d18c45a00350fbb4f37e807694bad617 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Thu, 20 Oct 2016 00:01:03 +0200 Subject: [PATCH 22/67] Follow up to dd55592 --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index b9cd111d12..161583cc2c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,16 +10,16 @@ environment: matrix: - VisualStudioVersion: 10.0 Solution: rAthena-10.sln - Defines: "BUILDBOT" + Defines: "BUILDBOT" - VisualStudioVersion: 11.0 Solution: rAthena-12.sln - Defines: "BUILDBOT" + Defines: "BUILDBOT" - VisualStudioVersion: 12.0 Solution: rAthena-13.sln - Defines: "BUILDBOT" + Defines: "BUILDBOT" - VisualStudioVersion: 14.0 Solution: rAthena-14.sln - Defines: "BUILDBOT" + Defines: "BUILDBOT" - VisualStudioVersion: 10.0 Solution: rAthena-10.sln Defines: "BUILDBOT;PRERE" From ed53167bc8d5660d1fcb5d64e47410f49994eafc Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Thu, 20 Oct 2016 00:11:52 +0200 Subject: [PATCH 23/67] Follow up abd9809 appveyor lost the quotes --- appveyor.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 161583cc2c..9d565b4789 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -10,28 +10,28 @@ environment: matrix: - VisualStudioVersion: 10.0 Solution: rAthena-10.sln - Defines: "BUILDBOT" + Defines: "\"BUILDBOT\"" - VisualStudioVersion: 11.0 Solution: rAthena-12.sln - Defines: "BUILDBOT" + Defines: "\"BUILDBOT\"" - VisualStudioVersion: 12.0 Solution: rAthena-13.sln - Defines: "BUILDBOT" + Defines: "\"BUILDBOT\"" - VisualStudioVersion: 14.0 Solution: rAthena-14.sln - Defines: "BUILDBOT" + Defines: "\"BUILDBOT\"" - VisualStudioVersion: 10.0 Solution: rAthena-10.sln - Defines: "BUILDBOT;PRERE" + Defines: "\"BUILDBOT;PRERE\"" - VisualStudioVersion: 11.0 Solution: rAthena-12.sln - Defines: "BUILDBOT;PRERE" + Defines: "\"BUILDBOT;PRERE\"" - VisualStudioVersion: 12.0 Solution: rAthena-13.sln - Defines: "BUILDBOT;PRERE" + Defines: "\"BUILDBOT;PRERE\"" - VisualStudioVersion: 14.0 Solution: rAthena-14.sln - Defines: "BUILDBOT;PRERE" + Defines: "\"BUILDBOT;PRERE\"" platform: - Win32 configuration: From 7d0931a45d226326c0dcb3e29a92fda8f4738a1c Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Thu, 20 Oct 2016 00:14:02 +0200 Subject: [PATCH 24/67] Follow up 3108bb1 Fixed a typo with configure call --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 307aa40d55..d98204a2f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,10 +41,10 @@ env: - DB_PASS="ragnarok" - PACKETDBVER=45 matrix: - - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no --enable_buildbot=yes" - - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no --enable_buildbot=yes" - - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=yes --enable_buildbot=yes" - - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=yes --enable_buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=no --enable-buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=no --enable-buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=no --enable-vip=yes --enable-buildbot=yes" + - CONFIGURE_FLAGS="--enable-prere=yes --enable-vip=yes --enable-buildbot=yes" notifications: email: false From d20cbcae48b41de6f1b367bf54e5f23bb87c3106 Mon Sep 17 00:00:00 2001 From: Akkarinage <akkarin@rathena.org> Date: Fri, 21 Oct 2016 20:25:32 +0100 Subject: [PATCH 25/67] Removed use of petheal command from pet_db.txt in both PRE and RE modes. (#1648) Removed use of petheal command from pet_db.txt in both PRE and RE modes. * Changed documentation to show deprecation more prominently. * Closes #1576. * Removed script command petheal. Signed-off-by: Akkarinage <akkarin@rathena.org> --- db/pre-re/pet_db.txt | 2 +- db/re/pet_db.txt | 2 +- doc/script_commands.txt | 8 ++------ src/map/script.c | 40 ---------------------------------------- 4 files changed, 4 insertions(+), 48 deletions(-) diff --git a/db/pre-re/pet_db.txt b/db/pre-re/pet_db.txt index 962441496b..a38ee61c86 100644 --- a/db/pre-re/pet_db.txt +++ b/db/pre-re/pet_db.txt @@ -50,7 +50,7 @@ 1023,ORK_WARRIOR,Orc Warrior,635,9017,10009,537,80,60,20,100,250,20,500,150,1,0,600,200,300,{ petskillattack2 "NPC_PIERCINGATT",100,1,0,10; },{ bonus bAtk,10; bonus bDef,-3; } 1026,MUNAK,Munak,636,9018,10008,537,80,60,20,100,250,20,500,150,0,0,300,750,300,{ petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10; },{ bonus bInt,1; bonus bDef,1; } 1110,DOKEBI,Dokebi,637,9019,10005,537,80,60,20,100,250,20,500,150,0,0,300,300,800,{ petskillattack "BS_HAMMERFALL",1,0,10; },{ bonus bMatkRate,1; bonus bAtkRate,-1; } -1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petheal 400,60,33,100; },{ bonus bStr,1; bonus bDex,1; } +1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,33,100; },{ bonus bStr,1; bonus bDex,1; } 1029,ISIS,Isis,639,9021,10006,537,80,60,10,100,250,20,500,150,0,0,650,450,150,{ petskillsupport "PR_MAGNIFICAT",2,60,50,50; },{ bonus bMatkRate,-1; bonus bAtkRate,1; } 1155,PETIT,Petite,640,9022,10011,537,80,60,20,100,250,20,500,150,0,0,800,400,100,{ petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10; },{ bonus bDef,-2; bonus bMdef,-2; bonus bAspdRate,1; } 1109,DEVIRUCHI,Deviruchi,641,9023,10004,711,80,60,10,100,250,20,500,150,0,0,800,200,100,{ petskillbonus bAgiDexStr,6,20,40; },{ bonus bMatkRate,1; bonus bAtkRate,1; bonus bMaxHPrate,-3; bonus bMaxSPrate,-3; } diff --git a/db/re/pet_db.txt b/db/re/pet_db.txt index 49f5ae62dd..0be08a181b 100644 --- a/db/re/pet_db.txt +++ b/db/re/pet_db.txt @@ -50,7 +50,7 @@ 1023,ORK_WARRIOR,Orc Warrior,635,9017,10009,537,80,60,20,100,250,20,500,150,1,0,600,200,300,{ petskillattack2 "NPC_PIERCINGATT",100,1,0,10; },{ bonus bAtk,10; bonus bDef,-3; } 1026,MUNAK,Munak,636,9018,10008,537,80,60,20,100,250,20,500,150,0,0,300,750,300,{ petskillattack2 "NPC_DARKNESSATTACK",444,1,0,10; },{ bonus bInt,1; bonus bDef,1; } 1110,DOKEBI,Dokebi,637,9019,10005,537,80,60,20,100,250,20,500,150,0,0,300,300,800,{ petskillattack "BS_HAMMERFALL",1,0,10; },{ bonus bMatkRate,1; bonus bAtkRate,-1; } -1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petheal 400,60,33,100; },{ bonus bStr,1; bonus bDex,1; } +1170,SOHEE,Sohee,638,9020,10016,537,80,60,10,100,250,20,500,150,0,0,100,1000,200,{ petskillsupport "AL_HEAL",5,60,33,100; },{ bonus bStr,1; bonus bDex,1; } 1029,ISIS,Isis,639,9021,10006,537,80,60,10,100,250,20,500,150,0,0,650,450,150,{ petskillsupport "PR_MAGNIFICAT",2,60,50,50; },{ bonus bMatkRate,-1; bonus bAtkRate,1; } 1155,PETIT,Petite,640,9022,10011,537,80,60,20,100,250,20,500,150,0,0,800,400,100,{ petskillattack2 "WZ_HEAVENDRIVE",500,1,0,10; },{ bonus bDef,-2; bonus bMdef,-2; bonus bAspdRate,1; } 1109,DEVIRUCHI,Deviruchi,641,9023,10004,711,80,60,10,100,250,20,500,150,0,0,800,200,100,{ petskillbonus bAgiDexStr,6,20,40; },{ bonus bMatkRate,1; bonus bAtkRate,1; bonus bMaxHPrate,-3; bonus bMaxSPrate,-3; } diff --git a/doc/script_commands.txt b/doc/script_commands.txt index eef5d93392..bc1b328103 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -8711,9 +8711,7 @@ to be executed from pet scripts. They will modify the pet AI decision-making for the current pet of the invoking character, and will NOT have any independent effect by themselves, which is why only one of them each may be in effect at any time for a specific pet. A pet may have 'petloot', 'petskillbonus', -'petskillattack' OR 'petpetskillattack2' and 'petskillsupport' OR 'petheal' at -the same time. 'petheal' is deprecated and is no longer used in the default pet -scripts. +'petskillattack' OR 'petpetskillattack2' and 'petskillsupport'. All commands with delays and durations will only make the behavior active for the specified duration of seconds, with a delay of the specified number of @@ -8768,13 +8766,11 @@ when pet performance is activated. *petskillsupport <skill id>,<skill level>,<delay>,<percent hp>,<percent sp>; *petskillsupport "<skill name>",<skill level>,<delay>,<percent hp>,<percent sp>; -*petheal <level>,<delay>,<percent hp>,<percent sp>; This will make the pet use a specified support skill on the owner whenever the HP and SP are below the given percent values, with a specified delay time between activations. The skill numbers are as per 'db/(pre-)re/skill_db.txt'. -'petheal' works the same as 'petskillsupport' but has the skill ID hard-coded to -AL_HEAL (ID:28). This command is deprecated. + It's not quite certain who's stats will be used for the skills cast, the character's or the pets. Probably, Skotlex can answer that question. diff --git a/src/map/script.c b/src/map/script.c index 73f8c452ff..2e09f1312c 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -13645,45 +13645,6 @@ BUILDIN_FUNC(petrecovery) return SCRIPT_CMD_SUCCESS; } -/*========================================== - * pet healing [Valaris] //Rewritten by [Skotlex] - *------------------------------------------*/ -BUILDIN_FUNC(petheal) -{ - struct pet_data *pd; - TBL_PC *sd=script_rid2sd(st); - - if(sd==NULL || sd->pd==NULL) - return SCRIPT_CMD_SUCCESS; - - pd=sd->pd; - if (pd->s_skill) - { //Clear previous skill - if (pd->s_skill->timer != INVALID_TIMER) - { - if (pd->s_skill->id) - delete_timer(pd->s_skill->timer, pet_skill_support_timer); - else - delete_timer(pd->s_skill->timer, pet_heal_timer); - } - } else //init memory - pd->s_skill = (struct pet_skill_support *) aMalloc(sizeof(struct pet_skill_support)); - - pd->s_skill->id=0; //This id identifies that it IS petheal rather than pet_skillsupport - //Use the lv as the amount to heal - pd->s_skill->lv=script_getnum(st,2); - pd->s_skill->delay=script_getnum(st,3); - pd->s_skill->hp=script_getnum(st,4); - pd->s_skill->sp=script_getnum(st,5); - - //Use delay as initial offset to avoid skill/heal exploits - if (battle_config.pet_equip_required && pd->pet.equip == 0) - pd->s_skill->timer = INVALID_TIMER; - else - pd->s_skill->timer = add_timer(gettick()+pd->s_skill->delay*1000,pet_heal_timer,sd->bl.id,0); - return SCRIPT_CMD_SUCCESS; -} - /*========================================== * pet attack skills [Valaris] //Rewritten by [Skotlex] *------------------------------------------*/ @@ -22243,7 +22204,6 @@ struct script_function buildin_func[] = { BUILDIN_DEF(petskillbonus,"iiii"), // [Valaris] BUILDIN_DEF(petrecovery,"ii"), // [Valaris] BUILDIN_DEF(petloot,"i"), // [Valaris] - BUILDIN_DEF(petheal,"iiii"), // [Valaris] BUILDIN_DEF(petskillattack,"viii"), // [Skotlex] BUILDIN_DEF(petskillattack2,"viiii"), // [Valaris] BUILDIN_DEF(petskillsupport,"viiii"), // [Skotlex] From 04cf397ea5da78ab2880f6d4a6e05ac691402954 Mon Sep 17 00:00:00 2001 From: Playtester <Kenji.Ito@gmx.de> Date: Sat, 22 Oct 2016 12:32:26 +0200 Subject: [PATCH 26/67] Occult Impaction damage (fixes #1641) - Fixed Occult Impaction damage being double as high as it should be - In renewal, the skill ratio is now applied to the piercing effect (If a skill deals 400% damage, the piercing effect will now also be 4 times more effective.) --- src/map/battle.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 0d0a010e6c..192db9615a 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3524,7 +3524,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s skillratio += 50 * skill_lv; break; case MO_INVESTIGATE: - skillratio += 100 + 150 * skill_lv; + skillratio += 75 * skill_lv; break; case MO_EXTREMITYFIST: skillratio += 100 * (7 + sstatus->sp / 10); @@ -4661,8 +4661,8 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list if( def1 == -400 ) /* -400 creates a division by 0 and subsequently crashes */ def1 = -399; ATK_ADD2(wd.damage, wd.damage2, - is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_R) ? (def1/2) : 0, - is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_L) ? (def1/2) : 0 + is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_R) ? (def1*battle_calc_attack_skill_ratio(wd, src, target, skill_id, skill_lv))/200 : 0, + is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_L) ? (def1*battle_calc_attack_skill_ratio(wd, src, target, skill_id, skill_lv))/200 : 0 ); if( !attack_ignores_def(wd, src, target, skill_id, skill_lv, EQI_HAND_R) && !is_attack_piercing(wd, src, target, skill_id, skill_lv, EQI_HAND_R) ) wd.damage = wd.damage * (4000+def1) / (4000+10*def1) - vit_def; From 6dfaa0b17bf1160d9485af4954f5ce2c75caf8b6 Mon Sep 17 00:00:00 2001 From: Playtester <Kenji.Ito@gmx.de> Date: Sat, 22 Oct 2016 12:48:07 +0200 Subject: [PATCH 27/67] Siroma and Imp Cards (fixes #1646) - Pre-re: Skill-specific cast time reductions no longer stack additively with global cast time reductions --- src/map/skill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/skill.c b/src/map/skill.c index fbe9f51b1a..a9a85d145e 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -16195,7 +16195,7 @@ int skill_castfix(struct block_list *bl, uint16 skill_id, uint16 skill_lv) { // Skill-specific reductions work regardless of flag for(i = 0; i < ARRAYLENGTH(sd->skillcastrate) && sd->skillcastrate[i].id; i++) { if (sd->skillcastrate[i].id == skill_id) { - reduce_cast_rate -= sd->skillcastrate[i].val; + time += time * sd->skillcastrate[i].val / 100; break; } } From 428e51618798f3f916d310420b7a7ccdabcd241d Mon Sep 17 00:00:00 2001 From: Smokexyz <sagunxp@gmail.com> Date: Tue, 25 Oct 2016 03:10:52 +0530 Subject: [PATCH 28/67] Typo in ipban.c (#1654) --- src/login/ipban.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/login/ipban.c b/src/login/ipban.c index 8aa628a2cf..d204ac84a5 100644 --- a/src/login/ipban.c +++ b/src/login/ipban.c @@ -216,7 +216,7 @@ void ipban_init(void) { Sql_Free(sql_handle); exit(EXIT_FAILURE); } - ShowInfo("Ipban conection made\n"); + ShowInfo("Ipban connection made.\n"); if( codepage[0] != '\0' && SQL_ERROR == Sql_SetEncoding(sql_handle, codepage) ) Sql_ShowDebug(sql_handle); From e9c5dc6e167f15cbfb1b8b0f565e857806de2f78 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Wed, 26 Oct 2016 19:18:57 -0400 Subject: [PATCH 29/67] Fixed instance maps not being freed * Follow up to 2cfb844. * Resolves instance maps not getting freed when the instance is destroyed. Thanks to @Akkarinage! --- src/map/instance.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/map/instance.c b/src/map/instance.c index 37a826d618..b9bee68fca 100644 --- a/src/map/instance.c +++ b/src/map/instance.c @@ -602,6 +602,9 @@ int instance_destroy(unsigned short instance_id) map_delinstancemap(im->map[i]->m); ers_free(instance_maps_ers, im->map[i]); } + im->cnt_map = 0; + aFree(im->map); + im->map = NULL; } if(im->keep_timer != INVALID_TIMER) { From c14e67426b89aa83a90995a971aa3d88882402de Mon Sep 17 00:00:00 2001 From: Jey <jey@toto-ro.de> Date: Mon, 17 Oct 2016 17:13:02 +0200 Subject: [PATCH 30/67] Fixes Phantom Thrust in PvE. --- src/map/skill.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index a9a85d145e..3a7a621f2c 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10971,12 +10971,10 @@ static int8 skill_castend_id_check(struct block_list *src, struct block_list *ta case WZ_ESTIMATION: case SL_SKE: case SL_SKA: + case RK_PHANTOMTHRUST: if (target->type == BL_MOB && ((TBL_MOB*)target)->mob_id == MOBID_EMPERIUM) return USESKILL_FAIL_MAX; break; - case RK_PHANTOMTHRUST: - if (!map_flag_vs(src->m)) - return USESKILL_FAIL_MAX; } if (inf && battle_check_target(src, target, inf) <= 0) { From 481a730ebc2b03ac5a9296f244471ea624db9fe2 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Fri, 28 Oct 2016 17:33:30 -0400 Subject: [PATCH 31/67] Adjusted some script syntax * Follow up to d017e24. Thanks to @Tokeiburu! --- npc/custom/breeder.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npc/custom/breeder.txt b/npc/custom/breeder.txt index e4d235b596..f31f1c7c2e 100644 --- a/npc/custom/breeder.txt +++ b/npc/custom/breeder.txt @@ -14,12 +14,12 @@ prontera,124,201,1 script Universal Rental NPC 726,{ if (ismounting()) { message strcharinfo(0),"You must first remove your mount."; end; - } else if ((eaclass()&EAJ_THIRDMASK==EAJ_RANGER) && !countitem(6124)) { + } else if (((eaclass()&EAJ_THIRDMASK)==EAJ_RANGER) && !countitem(6124)) { if (!checkfalcon() && getskilllv("HT_FALCON") && !checkwug()) { if(select(" ~ Falcon: ~ Warg")==1) setfalcon; else getitem 6124,1; //Wolf's_Flute } else getitem 6124,1; //Wolf's_Flute - } else if ((eaclass()&EAJ_THIRDMASK==EAJ_MECHANIC) && !checkcart() && getskilllv("MC_PUSHCART")) { + } else if (((eaclass()&EAJ_THIRDMASK)==EAJ_MECHANIC) && !checkcart() && getskilllv("MC_PUSHCART")) { if (!checkmadogear() && getskilllv("NC_MADOLICENCE")) { if(select(" ~ Cart: ~ Mado")==1) setcart; else setmadogear; From 6f67a65855f4b2ce0c8aab7bb9c1c945a7f1c801 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Sat, 29 Oct 2016 17:28:51 +0200 Subject: [PATCH 32/67] Added documentation for item links in mes (#1616) Fixes #1614 --- doc/script_commands.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index bc1b328103..87dee29729 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -1094,6 +1094,27 @@ to alberta (98,154) when clicked. See also 'navigateto', which can be used for certain NPC events. +Items +----- +You can refer to items by using HTML-like links to certain items: + + <ITEMLINK>Display Name<INFO>Item ID</INFO></ITEMLINK> + +Where <Display Name> is the name that will be displayed for your link and +<Item ID> being the ID of the item you want to link to when clicked. + +In 2015 the tag name was changed to <ITEM> resulting in the following syntax: + + <ITEM>Display Name<INFO>Item ID</INFO></ITEM> + +The following sample will open a preview window for Red Potion: + + mes "Did you ever consume a <ITEMLINK>Red Potion<INFO>501</INFO></ITEMLINK>?"; + // Or in 2015: + mes "Did you ever consume a <ITEM>Red Potion<INFO>501</INFO></ITEM>?"; + +NOTE: Be aware that item links are rendered incorrectly in 2015+ clients at the moment. + URLs ---- Similarly, you can create links to websites that launch in a new window: From 561a874833ae0aac0301667447d144071ca76afc Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Sat, 29 Oct 2016 12:44:11 -0400 Subject: [PATCH 33/67] Fixed Falcon Assault element (fixes #1659) * Partial revert of 1d8bec3. * Element should always be neutral. * Renewal mode ignores the target's defense cards. --- db/pre-re/skill_db.txt | 2 +- db/re/skill_db.txt | 2 +- src/map/battle.c | 11 ++--------- 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 0e30424fc2..ce08ee5721 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -549,7 +549,7 @@ //**** // Sniper 380,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, SN_SIGHT,Falcon Eyes -381,9,8,1,-3,0x40,0,5,1,yes,0,0,0,misc,0,0x0, SN_FALCONASSAULT,Falcon Assault +381,9,8,1,0,0x40,0,5,1,yes,0,0,0,misc,0,0x0, SN_FALCONASSAULT,Falcon Assault 382,9,8,1,-1,0,1,5,1,yes,0,0x40000,14,weapon,0,0x0, SN_SHARPSHOOTING,Focused Arrow Strike 383,0,6,4,0,0x3,-1,10,1,yes,0,0,0,weapon,0,0x0, SN_WINDWALK,Wind Walker diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 01e10f513f..a737d121d3 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -549,7 +549,7 @@ //**** // Sniper 380,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, SN_SIGHT,Falcon Eyes -381,9,8,1,-3,0x40,0,5,1,yes,0,0,0,misc,0,0x0, SN_FALCONASSAULT,Falcon Assault +381,9,8,1,0,0xC0,0,5,1,yes,0,0,0,misc,0,0x0, SN_FALCONASSAULT,Falcon Assault 382,9,8,1,-1,0,1,5,1,yes,0,0x40000,14,weapon,0,0x0, SN_SHARPSHOOTING,Focused Arrow Strike 383,0,6,4,0,0x3,-1,10,1,yes,0,0,0,weapon,0,0x0, SN_WINDWALK,Wind Walker diff --git a/src/map/battle.c b/src/map/battle.c index 192db9615a..bf523bfbc6 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -6317,15 +6317,8 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * s_ele = skill_get_ele(skill_id, skill_lv); if (s_ele < 0 && s_ele != -3) //Attack that takes weapon's element for misc attacks? Make it neutral [Skotlex] s_ele = ELE_NEUTRAL; - else if (s_ele == -3) { //Use random element - if (skill_id == SN_FALCONASSAULT) { - if (sstatus->rhw.ele && !status_get_attack_sc_element(src, status_get_sc(src))) - s_ele = sstatus->rhw.ele; - else - s_ele = status_get_attack_sc_element(src, status_get_sc(src)); - } else - s_ele = rnd()%ELE_ALL; - } + else if (s_ele == -3) //Use random element + s_ele = rnd()%ELE_ALL; //Skill Range Criteria md.flag |= battle_range_type(src, target, skill_id, skill_lv); From 5d24d73abf8ce20ef8c3f5f0fae00805a7473638 Mon Sep 17 00:00:00 2001 From: Playtester <Kenji.Ito@gmx.de> Date: Sat, 29 Oct 2016 19:43:53 +0200 Subject: [PATCH 34/67] Lex Divina on allies (fixes #1668) - Lex Divina can now be cast on a silenced ally - When casting Lex Divina on an ally that is not silenced, it will no longer display the skill animation --- src/map/skill.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 3a7a621f2c..b7b5860b41 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10920,10 +10920,10 @@ static int8 skill_castend_id_check(struct block_list *src, struct block_list *ta case MER_LEXDIVINA: { //If it's not an enemy, and not silenced, you can't use the skill on them. [Skotlex] - if (battle_check_target(src,target, BCT_ENEMY) <= 0 && (!tsc || !tsc->data[SC_SILENCE])) { - clif_skill_nodamage (src, target, skill_id, skill_lv, 0); - return USESKILL_FAIL_MAX; - } + if (battle_check_target(src,target, BCT_ENEMY) <= 0 && (!tsc || !tsc->data[SC_SILENCE])) + return USESKILL_FAIL_LEVEL; + else + return -1; //Works on silenced allies } break; case RA_WUGSTRIKE: From 644d809ddb2cf7257aa31292f798cca31b953ae4 Mon Sep 17 00:00:00 2001 From: Akkarinage <akkarin@rathena.org> Date: Sat, 29 Oct 2016 23:34:01 +0100 Subject: [PATCH 35/67] Added missing items for IG_Mysterious_Travel_Sack4 Used Divine-Pride as a source of data. Their information seems to be the most up-to-date source at the moment. Signed-off-by: Akkarinage <akkarin@rathena.org> --- db/re/item_package.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/db/re/item_package.txt b/db/re/item_package.txt index 214c4eff2d..985920cc75 100644 --- a/db/re/item_package.txt +++ b/db/re/item_package.txt @@ -792,6 +792,24 @@ IG_Mysterious_Travel_Sack3,13753,80,1,1,0,0,1 // 1x S_Mdef_Potion_Box30 IG_Mysterious_Travel_Sack3,13710,80,1,1,0,0,1 // 1x Max_Weight_Up_Box IG_Mysterious_Travel_Sack3,13720,100,1,1,0,0,1 // 1x Regeneration_Box10 +IG_Mysterious_Travel_Sack4,5140,1,1,1,0,0,1 // 1x Charming_Ribbon +IG_Mysterious_Travel_Sack4,5187,2,1,1,0,0,1 // 1x Twin_Ribbon +IG_Mysterious_Travel_Sack4,5194,2,1,1,0,0,1 // 1x Ribbon_Pink +IG_Mysterious_Travel_Sack4,5196,2,1,1,0,0,1 // 1x Ribbon_Orange +IG_Mysterious_Travel_Sack4,5197,2,1,1,0,0,1 // 1x Ribbon_White +IG_Mysterious_Travel_Sack4,5288,1,1,1,0,0,1 // 1x Red_Glasses +IG_Mysterious_Travel_Sack4,5801,2,1,1,0,0,1 // 1x Ribbon_Of_Bride +IG_Mysterious_Travel_Sack4,13553,5,1,1,0,0,1 // 1x Dun_Tele_Scroll1_Box +IG_Mysterious_Travel_Sack4,13710,80,1,1,0,0,1 // 1x Max_Weight_Up_Box +IG_Mysterious_Travel_Sack4,13712,203,1,1,0,0,1 // 1x Small_Life_Potion_Box30 +IG_Mysterious_Travel_Sack4,13715,203,1,1,0,0,1 // 1x Med_Life_Potion_Box30 +IG_Mysterious_Travel_Sack4,13720,203,1,1,0,0,1 // 1x Regeneration_Box10 +IG_Mysterious_Travel_Sack4,13741,5,1,1,0,0,1 // 1x Shadow_Armor_S_Box10 +IG_Mysterious_Travel_Sack4,13744,5,1,1,0,0,1 // 1x Holy_Armor_S_Box10 +IG_Mysterious_Travel_Sack4,13747,203,1,1,0,0,1 // 1x S_Def_Potion_Box30 +IG_Mysterious_Travel_Sack4,13753,80,1,1,0,0,1 // 1x S_Mdef_Potion_Box30 +IG_Mysterious_Travel_Sack4,14527,1,1,1,0,0,1 // 1x Dun_Tele_Scroll1 + IG_Magician_Card_Box,4327,0,1,0,0,0,1 // 1x Blood_Butterfly_Card IG_Magician_Card_Box,4309,0,1,0,0,0,1 // 1x Parasite_Card IG_Magician_Card_Box,4325,0,1,0,0,0,1 // 1x Harpy_Card From 9a130fa0e8c2990057db45888360b703a93b148d Mon Sep 17 00:00:00 2001 From: Playtester <Kenji.Ito@gmx.de> Date: Sun, 30 Oct 2016 13:27:30 +0100 Subject: [PATCH 36/67] SG counter and other status variables (bugreport:7449) - Fixed extra status variables not being cleared correctly when the killed unit did not have any status change (e.g. SG counter will now be set back to 0 when a monster dies) Reference: https://rathena.org/board/tracker/issue-7449-storm-gust-counter-does-not-get-reset-on-mob-dead/ --- src/map/status.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/map/status.c b/src/map/status.c index ce4d27787b..b65da65c90 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -11156,7 +11156,18 @@ int status_change_clear(struct block_list* bl, int type) sc = status_get_sc(bl); - if (!sc || !sc->count) + if (!sc) + return 0; + + // Cleaning all extras vars + sc->comet_x = 0; + sc->comet_y = 0; +#ifndef RENEWAL + sc->sg_counter = 0; +#endif + sc->bs_counter = 0; + + if (!sc->count) return 0; for(i = 0; i < SC_MAX; i++) { @@ -11308,14 +11319,6 @@ int status_change_clear(struct block_list* bl, int type) sc->opt2 = 0; sc->opt3 = 0; - // Cleaning all extras vars - sc->comet_x = 0; - sc->comet_y = 0; -#ifndef RENEWAL - sc->sg_counter = 0; -#endif - sc->bs_counter = 0; - if( type == 0 || type == 2 ) clif_changeoption(bl); From c1d9520019962606aded15fed239b5021be0dae8 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Mon, 31 Oct 2016 17:08:44 -0400 Subject: [PATCH 37/67] Added an extra ammo requirement for specific skills (fixes #1683) * Severe Rainstorm, Round Trip, and Fire Rain now require +1 to their ammo requirement in order to successfully cast the skill. * These skills will still consume their normal ammo amount. Thanks to Fyrus for data mining! --- src/map/skill.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/map/skill.c b/src/map/skill.c index b7b5860b41..97d0239939 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -15686,10 +15686,23 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, } if( require.ammo ) { //Skill requires stuff equipped in the ammo slot. + uint8 extra_ammo = 0; + +#ifdef RENEWAL + switch(skill_id) { // 2016-10-26 kRO update made these skills require an extra ammo to cast + case WM_SEVERE_RAINSTORM: + case RL_R_TRIP: + case RL_FIRE_RAIN: + extra_ammo = 1; + break; + default: + break; + } +#endif if((i=sd->equip_index[EQI_AMMO]) < 0 || !sd->inventory_data[i] ) { clif_arrow_fail(sd,0); return false; - } else if( sd->status.inventory[i].amount < require.ammo_qty ) { + } else if( sd->status.inventory[i].amount < require.ammo_qty + extra_ammo ) { char e_msg[100]; if (require.ammo&(1<<AMMO_BULLET|1<<AMMO_GRENADE|1<<AMMO_SHELL)) { clif_skill_fail(sd,skill_id,USESKILL_FAIL_NEED_MORE_BULLET,0); From dc8d466b03d0686a9d72c3b48efa62cc97f9e651 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Mon, 31 Oct 2016 21:58:28 -0400 Subject: [PATCH 38/67] Minor define cleanups * Removed some variable defines that were redefines. --- src/map/skill.c | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 97d0239939..93504ec7da 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5085,20 +5085,16 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint break; #endif case RK_DRAGONBREATH_WATER: - case RK_DRAGONBREATH: { - struct status_change *tsc2 = NULL; - if( (tsc2 = status_get_sc(bl)) && (tsc2->data[SC_HIDING] )) { - clif_skill_nodamage(src,src,skill_id,skill_lv,1); - } else - skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); - } + case RK_DRAGONBREATH: + if( tsc->data[SC_HIDING] ) + clif_skill_nodamage(src,src,skill_id,skill_lv,1); + else + skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; - case NPC_SELFDESTRUCTION: { - struct status_change *tsc2 = NULL; - if( (tsc2 = status_get_sc(bl)) && tsc2->data[SC_HIDING] ) + case NPC_SELFDESTRUCTION: + if( tsc->data[SC_HIDING] ) break; - } case HVAN_EXPLOSION: if (src != bl) skill_attack(BF_MISC,src,src,bl,skill_id,skill_lv,tick,flag); @@ -5558,15 +5554,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } break; - case SO_POISON_BUSTER: { - struct status_change *tsc2 = status_get_sc(bl); - if( tsc2 && tsc2->data[SC_POISON] ) { - skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); - status_change_end(bl, SC_POISON, INVALID_TIMER); - } - else if( sd ) - clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0); + case SO_POISON_BUSTER: + if( tsc && tsc->data[SC_POISON] ) { + skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); + status_change_end(bl, SC_POISON, INVALID_TIMER); } + else if( sd ) + clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0); break; case GN_SPORE_EXPLOSION: @@ -5660,14 +5654,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case EL_TIDAL_WEAPON: if( src->type == BL_ELEM ) { struct elemental_data *ele = BL_CAST(BL_ELEM,src); - struct status_change *sc2 = status_get_sc(&ele->bl); - struct status_change *tsc2 = status_get_sc(bl); + struct status_change *tsc_ele = status_get_sc(&ele->bl); sc_type type = status_skill2sc(skill_id), type2; type2 = type-1; clif_skill_nodamage(src,battle_get_master(src),skill_id,skill_lv,1); clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SKILL); - if( (sc2 && sc2->data[type2]) || (tsc2 && tsc2->data[type]) ) { + if( (tsc_ele && tsc_ele->data[type2]) || (tsc && tsc->data[type]) ) { elemental_clean_single_effect(ele, skill_id); } if( rnd()%100 < 50 ) From 9fcdcbde3b8bd9831ea46585af58e94a4b218525 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh <house.bad@gmail.com> Date: Tue, 1 Nov 2016 12:13:24 +0700 Subject: [PATCH 39/67] Item DB Updates (#1592) * Item DB Updates * Corrected Aegis and English (iRO) names of Enchancement Stones & Shadow Equipments, credits to http://divine-pride.net * Corrected Price for Shadow equipments to 0. * Fixed #1586 item position for Essence of Evils. * Updated effect of `Bear's Power`, script by @Lemongrass3110 Signed-off-by: Cydh Ramdh <cydh@pservero.com> --- db/re/item_db.txt | 771 +++++++++++++++++++++++----------------------- 1 file changed, 385 insertions(+), 386 deletions(-) diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 0dad83c979..8658c738ca 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -2934,24 +2934,24 @@ 4765,Critical7,CRI+7,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,7; },{},{} 4766,Atk2,ATK+2%,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,2; },{},{} 4767,Atk3,ATK+3%,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,3; },{},{} -4768,Str1_J,STR+1,6,20,,10,,,,,,,,,,,,,{},{},{} -4769,Str2_J,STR+2,6,20,,10,,,,,,,,,,,,,{},{},{} -4770,Str3_J,STR+3,6,20,,10,,,,,,,,,,,,,{},{},{} -4771,Int1_J,INT+1,6,20,,10,,,,,,,,,,,,,{},{},{} -4772,Int2_J,INT+2,6,20,,10,,,,,,,,,,,,,{},{},{} -4773,Int3_J,INT+3,6,20,,10,,,,,,,,,,,,,{},{},{} -4774,Vit1_J,VIT+1,6,20,,10,,,,,,,,,,,,,{},{},{} -4775,Vit2_J,VIT+2,6,20,,10,,,,,,,,,,,,,{},{},{} -4776,Vit3_J,VIT+3,6,20,,10,,,,,,,,,,,,,{},{},{} -4777,Agi1_J,AGI+1,6,20,,10,,,,,,,,,,,,,{},{},{} -4778,Agi2_J,AGI+2,6,20,,10,,,,,,,,,,,,,{},{},{} -4779,Agi3_J,AGI+3,6,20,,10,,,,,,,,,,,,,{},{},{} -4780,Dex1_J,DEX+1,6,20,,10,,,,,,,,,,,,,{},{},{} -4781,Dex2_J,DEX+2,6,20,,10,,,,,,,,,,,,,{},{},{} -4782,Dex3_J,DEX+3,6,20,,10,,,,,,,,,,,,,{},{},{} -4783,Luk1_J,LUK+1,6,20,,10,,,,,,,,,,,,,{},{},{} -4784,Luk2_J,LUK+2,6,20,,10,,,,,,,,,,,,,{},{},{} -4785,Luk3_J,LUK+3,6,20,,10,,,,,,,,,,,,,{},{},{} +4768,Str1_J,Str + 1,6,20,,10,,,,,,,,,,,,,{},{},{} +4769,Str2_J,Str + 2,6,20,,10,,,,,,,,,,,,,{},{},{} +4770,Str3_J,Str + 3,6,20,,10,,,,,,,,,,,,,{},{},{} +4771,Int1_J,Int + 1,6,20,,10,,,,,,,,,,,,,{},{},{} +4772,Int2_J,Int + 2,6,20,,10,,,,,,,,,,,,,{},{},{} +4773,Int3_J,Int + 3,6,20,,10,,,,,,,,,,,,,{},{},{} +4774,Vit1_J,Vit + 1,6,20,,10,,,,,,,,,,,,,{},{},{} +4775,Vit2_J,Vit + 2,6,20,,10,,,,,,,,,,,,,{},{},{} +4776,Vit3_J,Vit + 3,6,20,,10,,,,,,,,,,,,,{},{},{} +4777,Agi1_J,Agi + 1,6,20,,10,,,,,,,,,,,,,{},{},{} +4778,Agi2_J,Agi + 2,6,20,,10,,,,,,,,,,,,,{},{},{} +4779,Agi3_J,Agi + 3,6,20,,10,,,,,,,,,,,,,{},{},{} +4780,Dex1_J,Dex + 1,6,20,,10,,,,,,,,,,,,,{},{},{} +4781,Dex2_J,Dex + 2,6,20,,10,,,,,,,,,,,,,{},{},{} +4782,Dex3_J,Dex + 3,6,20,,10,,,,,,,,,,,,,{},{},{} +4783,Luk1_J,Luk + 1,6,20,,10,,,,,,,,,,,,,{},{},{} +4784,Luk2_J,Luk + 2,6,20,,10,,,,,,,,,,,,,{},{},{} +4785,Luk3_J,Luk + 3,6,20,,10,,,,,,,,,,,,,{},{},{} 4786,Mdef2,MDEF+2,6,20,,10,,,,,,,,,,,,,{ bonus bMdef,2; },{},{} 4787,Mdef4,MDEF+4,6,20,,10,,,,,,,,,,,,,{ bonus bMdef,4; },{},{} 4788,Mdef6,MDEF+6,6,20,,10,,,,,,,,,,,,,{ bonus bMdef,6; },{},{} @@ -2969,153 +2969,152 @@ 4800,SP50,SP+50,6,20,,10,,,,,,,,,,,,,{ bonus bMaxSP,50; },{},{} 4801,SP100,SP+100,6,20,,10,,,,,,,,,,,,,{ bonus bMaxSP,100; },{},{} 4802,SP150,SP+150,6,20,,10,,,,,,,,,,,,,{ bonus bMaxSP,150; },{},{} -4803,Highness_Heal_3sec,Recovery Lv1,6,20,,10,,,,,,,,,,,,,{ bonus2 bSkillCooldown,"AB_HIGHNESSHEAL",-3000; },{},{} -4804,Coluceo_Heal30,Cathedral Lv1,6,20,,10,,,,,,,,,,,,,{ bonus2 bSkillUseSP,"AB_CHEAL",30; },{},{} -4805,Heal_Amount2,Archbishop Lv1,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,3; },{},{} +4803,Highness_Heal_3sec,Cure1Lv.,6,20,,10,,,,,,,,,,,,,{ bonus2 bSkillCooldown,"AB_HIGHNESSHEAL",-3000; },{},{} +4804,Coluceo_Heal30,Catholic1Lv.,6,20,,10,,,,,,,,,,,,,{ bonus2 bSkillUseSP,"AB_CHEAL",30; },{},{} +4805,Heal_Amount2,Archbishop1Lv,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,3; },{},{} 4806,Matk3,MATK+3%,6,20,,10,,,,,,,,,,,,,{ bonus bMatkRate,3; bonus bFixedCastrate,-1; },{},{} -4807,Atk_Speed1,ASPD+1,6,20,,10,,,,,,,,,,,,,{ bonus bAspd,1; },{},{} -4808,Fighting_Spirit4,Fighting Lv4,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,15; bonus bHit,5; },{},{} -4809,Fighting_Spirit3,Fighting Lv3,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,12; bonus bHit,4; },{},{} -4810,Fighting_Spirit2,Fighting Lv2,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,9; bonus bHit,3; },{},{} -4811,Fighting_Spirit1,Fighting Lv1,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,6; bonus bHit,2; },{},{} -4812,Spell4,Force Lv4,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,15; bonus bVariableCastrate,-10; },{},{} -4813,Spell3,Force Lv3,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,12; bonus bVariableCastrate,-8; },{},{} -4814,Spell2,Force Lv2,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,9; bonus bVariableCastrate,-6; },{},{} -4815,Spell1,Force Lv1,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,6; bonus bVariableCastrate,-4; },{},{} -4816,Sharp3,Sharp Lv3,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,12; bonus bHit,4; },{},{} -4817,Sharp2,Sharp Lv2,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,9; bonus bHit,3; },{},{} -4818,Sharp1,Sharp Lv1,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,6; bonus bHit,2; },{},{} -4819,Atk1,ATK+1%,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,1; },{},{} -4820,Fighting_Spirit5,Fighting Lv5,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,18; bonus bHit,5; },{},{} -4821,Fighting_Spirit6,Fighting Lv6,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,21; bonus bHit,5; },{},{} -4822,Fighting_Spirit7,Fighting Lv7,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,24; bonus bHit,5; },{},{} -4823,Fighting_Spirit8,Fighting Lv8,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,27; bonus bHit,5; },{},{} -4824,Fighting_Spirit9,Fighting Lv9,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,30; bonus bHit,5; },{},{} -4825,Fighting_Spirit10,Fighting Lv10,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,50; bonus bHit,15; },{},{} -4826,Spell5,Force Lv5,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,18; bonus bVariableCastrate,-10; },{},{} -4827,Spell6,Force Lv6,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,21; bonus bVariableCastrate,-10; },{},{} -4828,Spell7,Force Lv7,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,24; bonus bVariableCastrate,-10; },{},{} -4829,Spell8,Force Lv8,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,27; bonus bVariableCastrate,-10; },{},{} -4830,Spell9,Force Lv9,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,30; bonus bVariableCastrate,-10; },{},{} -4831,Spell10,Force Lv10,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,50; bonus bVariableCastrate,-20; },{},{} -4832,Expert_Archer1,Archer Lv1,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,2; },{},{} -4833,Expert_Archer2,Archer Lv2,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,4; },{},{} -4834,Expert_Archer3,Archer Lv3,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,6; },{},{} -4835,Expert_Archer4,Archer Lv4,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,8; },{},{} -4836,Expert_Archer5,Archer Lv5,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,10; },{},{} -4837,Expert_Archer6,Archer Lv6,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,12; },{},{} -4838,Expert_Archer7,Archer Lv7,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,14; },{},{} -4839,Expert_Archer8,Archer Lv8,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,16; },{},{} -4840,Expert_Archer9,Archer Lv9,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,18; },{},{} -4841,Expert_Archer10,Archer Lv10,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,20; bonus bAspd,1; },{},{} -4842,Atk_Speed2,ASPD+2,6,20,,10,,,,,,,,,,,,,{ bonus bAspd,2; },{},{} -4843,Sharp4,Sharp Lv4,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,14; bonus bHit,5; },{},{} -4844,Sharp5,Sharp Lv5,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,15; bonus bHit,6; },{},{} +4807,Atk_Speed1,Atk Speed1,6,20,,10,,,,,,,,,,,,,{ bonus bAspd,1; },{},{} +4808,Fighting_Spirit4,Fighting Spirit4,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,15; bonus bHit,5; },{},{} +4809,Fighting_Spirit3,Fighting Spirit3,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,12; bonus bHit,4; },{},{} +4810,Fighting_Spirit2,Fighting Spirit2,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,9; bonus bHit,3; },{},{} +4811,Fighting_Spirit1,Fighting Spirit1,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,6; bonus bHit,2; },{},{} +4812,Spell4,Spell4,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,15; bonus bVariableCastrate,-10; },{},{} +4813,Spell3,Spell3,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,12; bonus bVariableCastrate,-8; },{},{} +4814,Spell2,Spell2,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,9; bonus bVariableCastrate,-6; },{},{} +4815,Spell1,Spell1,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,6; bonus bVariableCastrate,-4; },{},{} +4816,Sharp3,Sharp3,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,12; bonus bHit,4; },{},{} +4817,Sharp2,Sharp2,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,9; bonus bHit,3; },{},{} +4818,Sharp1,Sharp1,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,6; bonus bHit,2; },{},{} +4819,Atk1,Atk1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddClass,Class_All,1; },{},{} +4820,Fighting_Spirit5,Fighting Spirit5,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,18; bonus bHit,5; },{},{} +4821,Fighting_Spirit6,Fighting Spirit6,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,21; bonus bHit,5; },{},{} +4822,Fighting_Spirit7,Fighting Spirit7,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,24; bonus bHit,5; },{},{} +4823,Fighting_Spirit8,Fighting Spirit8,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,27; bonus bHit,5; },{},{} +4824,Fighting_Spirit9,Fighting Spirit9,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,30; bonus bHit,5; },{},{} +4825,Fighting_Spirit10,Fighting Spirit10,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,50; bonus bHit,15; },{},{} +4826,Spell5,Spell5,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,18; bonus bVariableCastrate,-10; },{},{} +4827,Spell6,Spell6,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,21; bonus bVariableCastrate,-10; },{},{} +4828,Spell7,Spell7,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,24; bonus bVariableCastrate,-10; },{},{} +4829,Spell8,Spell8,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,27; bonus bVariableCastrate,-10; },{},{} +4830,Spell9,Spell9,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,30; bonus bVariableCastrate,-10; },{},{} +4831,Spell10,Spell10,6,20,,10,,,,,,,,,,,,,{ bonus bMatk,50; bonus bVariableCastrate,-20; },{},{} +4832,Expert_Archer1,Expert Archer1,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,2; },{},{} +4833,Expert_Archer2,Expert Archer2,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,4; },{},{} +4834,Expert_Archer3,Expert Archer3,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,6; },{},{} +4835,Expert_Archer4,Expert Archer4,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,8; },{},{} +4836,Expert_Archer5,Expert Archer5,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,10; },{},{} +4837,Expert_Archer6,Expert Archer6,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,12; },{},{} +4838,Expert_Archer7,Expert Archer7,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,14; },{},{} +4839,Expert_Archer8,Expert Archer8,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,16; },{},{} +4840,Expert_Archer9,Expert Archer9,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,18; },{},{} +4841,Expert_Archer10,Expert Archer10,6,20,,10,,,,,,,,,,,,,{ bonus bLongAtkRate,20; bonus bAspd,1; },{},{} +4842,Atk_Speed2,Atk Speed2,6,20,,10,,,,,,,,,,,,,{ bonus bAspd,2; },{},{} +4843,Sharp4,Sharp4,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,14; bonus bHit,5; },{},{} +4844,Sharp5,Sharp5,6,20,,10,,,,,,,,,,,,,{ bonus bCritical,15; bonus bHit,6; },{},{} 4845,Sea_Energy,Strength Of Ocean,6,0,,0,,,,,,,,,,,,,{},{},{} -//4845,Cobble_Stone,Cobble Stone,6,20,,,,,,,,,,,,,,,{},{},{} -4846,2011val_Angel,Fully Loved Stone,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,10; bonus bMatk,10; },{},{} -4847,2011val_Devil,Spelled Stone,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,10; bonus bMatk,10; },{},{} -4848,Immuned1,Immune Lv1,6,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,5; },{},{} -4849,Cranial1,Crescent Lv1,6,20,,10,,,,,,,,,,,,,{ bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; },{},{} -4850,Heal_Amount3,Archbishop Lv2,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,6; bonus bUseSPrate,5; },{},{} -4851,Heal_Amount4,Archbishop Lv3,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,12; bonus bUseSPrate,10; },{},{} -4852,Heal_Amount5,Archbishop Lv4,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,20; bonus bUseSPrate,15; },{},{} -4853,S_STR,Special STR,6,20,,10,,,,,,,,,,,,,{ bonus bStr,1; .@r = getrefine(); if(.@r>7) { bonus bStr,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} -4854,S_AGI,Special AGI,6,20,,10,,,,,,,,,,,,,{ bonus bAgi,1; .@r = getrefine(); if(.@r>7) { bonus bAgi,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} -4855,S_VIT,Special VIT,6,20,,10,,,,,,,,,,,,,{ bonus bVit,1; .@r = getrefine(); if(.@r>7) { bonus bVit,3; } if(.@r>8) { bonus bMaxSPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} -4856,S_INT,Special INT,6,20,,10,,,,,,,,,,,,,{ bonus bInt,1; .@r = getrefine(); if(.@r>7) { bonus bInt,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} -4857,S_DEX,Special DEX,6,20,,10,,,,,,,,,,,,,{ bonus bDex,1; .@r = getrefine(); if(.@r>7) { bonus bDex,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} -4858,S_LUK,Special LUK,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,1; .@r = getrefine(); if(.@r>7) { bonus bLuk,3; } if(.@r>8) { bonus bMaxHPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} -4859,Evasion1,Flee+1,6,20,,10,,,,,,,,,,,,,{ bonus bFlee,1; },{},{} -4860,Evasion3,Flee+3,6,20,,10,,,,,,,,,,,,,{ bonus bFlee,3; },{},{} -4861,MHP1,MaxHP+1%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,1; },{},{} -4862,MHP2,MaxHP+2%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,2; },{},{} -4863,Fatal1Lv,Fatal Lv1,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,4; bonus bCritical,1; },{},{} -4864,Fatal2Lv,Fatal Lv2,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,6; bonus bCritical,2; },{},{} -4865,Fatal3Lv,Fatal Lv3,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,8; bonus bCritical,3; },{},{} -4866,Fatal4Lv,Fatal Lv4,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,10; bonus bCritical,4; },{},{} -4867,MHP3,MaxHP+3%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,3; },{},{} -4868,MHP4,MaxHP+4%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,4; },{},{} -4869,DelayafterAttack1Lv,DelayAfterAttack Lv1,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,4; bonus bDelayrate,-4; },{},{} +4846,2011Valentin_Angel,Fully Loved Stone,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,10; bonus bMatk,10; },{},{} +4847,2011Valentin_Devil,Spelled Stone,6,20,,10,,,,,,,,,,,,,{ bonus bBaseAtk,10; bonus bMatk,10; },{},{} +4848,Immuned1,Immune Level 1,6,20,,10,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,5; },{},{} +4849,Cranial1,Cranial Level 1,6,20,,10,,,,,,,,,,,,,{ bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; },{},{} +4850,Heal_Amount3,Heal Amount2,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,6; bonus bUseSPrate,5; },{},{} +4851,Heal_Amount4,Heal Amount3,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,12; bonus bUseSPrate,10; },{},{} +4852,Heal_Amount5,Heal Amount4,6,20,,10,,,,,,,,,,,,,{ bonus bHealPower,20; bonus bUseSPrate,15; },{},{} +4853,S_Str,Special Str,6,20,,10,,,,,,,,,,,,,{ bonus bStr,1; .@r = getrefine(); if(.@r>7) { bonus bStr,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} +4854,S_Agi,Special Agi,6,20,,10,,,,,,,,,,,,,{ bonus bAgi,1; .@r = getrefine(); if(.@r>7) { bonus bAgi,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} +4855,S_Vital,Special Vit,6,20,,10,,,,,,,,,,,,,{ bonus bVit,1; .@r = getrefine(); if(.@r>7) { bonus bVit,3; } if(.@r>8) { bonus bMaxSPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} +4856,S_Int,Special Int,6,20,,10,,,,,,,,,,,,,{ bonus bInt,1; .@r = getrefine(); if(.@r>7) { bonus bInt,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} +4857,S_Dex,Special Dex,6,20,,10,,,,,,,,,,,,,{ bonus bDex,1; .@r = getrefine(); if(.@r>7) { bonus bDex,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} +4858,S_Luck,Special Luk,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,1; .@r = getrefine(); if(.@r>7) { bonus bLuk,3; } if(.@r>8) { bonus bMaxHPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; } },{},{} +4859,Evasion1,Evasion1,6,20,,10,,,,,,,,,,,,,{ bonus bFlee,1; },{},{} +4860,Evasion3,Evasion3,6,20,,10,,,,,,,,,,,,,{ bonus bFlee,3; },{},{} +4861,MHP1,MHP+1%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,1; },{},{} +4862,MHP2,MHP+2%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,2; },{},{} +4863,Fatal1,Fatal1Lv,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,4; bonus bCritical,1; },{},{} +4864,Fatal2,Fatal2Lv,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,6; bonus bCritical,2; },{},{} +4865,Fatal3,Fatal3Lv,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,8; bonus bCritical,3; },{},{} +4866,Fatal4,Fatal4Lv,6,10,,,,,,,,,,,,,,,{ bonus bCritAtkRate,10; bonus bCritical,4; },{},{} +4867,MHP3,MHP+3%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,3; },{},{} +4868,MHP4,MHP+4%,6,20,,10,,,,,,,,,,,,,{ bonus bMaxHPrate,4; },{},{} +4869,Attack_Delay_1,DelayafterAttack1Lv,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,4; bonus bDelayrate,-4; },{},{} 4870,SP25,SP+25,6,20,,10,,,,,,,,,,,,,{ bonus bMaxSP,25; },{},{} 4871,SP75,SP+75,6,20,,10,,,,,,,,,,,,,{ bonus bMaxSP,75; },{},{} -4872,DelayafterAttack2Lv,DelayAfterAttack Lv2,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,6; bonus bDelayrate,-6; },{},{} -4873,DelayafterAttack3Lv,DelayAfterAttack Lv3,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,8; bonus bDelayrate,-8; },{},{} -4875,Strength_of_Bear,Strength of Bear,6,20,,10,,,,,,,,,,,,,{ /*TODO: Confirm the rate*/ autobonus2 "{ bonus bStr,200; bonus2 bHPLossRate,500,1000; }",10,5000,BF_WEAPON,"{ active_transform 1060,5000; specialeffect2 EF_FIRESPLASHHIT; }"; },{},{ heal 0,-300; } +4872,Attack_Delay_2,DelayafterAttack2Lv,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,6; bonus bDelayrate,-6; },{},{} +4873,Attack_Delay_3,DelayafterAttack3Lv,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,8; bonus bDelayrate,-8; },{},{} +4875,Bear's_Power,Bear's Power,6,20,,10,,,,,,,,,,,,,{ autobonus2 "{ bonus bStr,200; bonus2 bHPLossRate,500,1000; }",20,5000,BF_WEAPON,"{ active_transform 1060,5000; specialeffect2 EF_POTION_BERSERK; showscript \"Bigfoot Power !\"; }"; },{},{} 4876,Runaway_Magic,Runaway Magic,6,20,,10,,,,,,,,,,,,,{ autobonus "{ bonus bInt,200; bonus2 bSPLossRate,200,1000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_LAMADAN; }"; },{},{ heal 0,-2000; } 4877,Speed_of_Light,Speed of Light,6,20,,10,,,,,,,,,,,,,{ /*TODO: Confirm the rate*/ autobonus "{ bonus bAspdRate,100; bonus bFlee,100; bonus2 bHPLossRate,400,1000; bonus2 bSPLossRate,50,1000;}",10,5000,BF_WEAPON,"{ specialeffect2 EF_AGIUP2; }"; },{},{ heal 0,-300; } -4878,Muscular_Endurance,Muscular Endurance,6,20,,10,,,,,,,,,,,,,{ autobonus2 "{ bonus bDef,1000; bonus2 bAddRace,RC_All,-50; bonus bMatkRate,-50; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD3; }"; },{},{ heal 0,-300; } -4879,Hawk_Eye,Hawk Eye,6,20,,10,,,,,,,,,,,,,{ autobonus "{ bonus bDex,200; bonus2 bSPLossRate,50,1000; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_BASH3D6; }"; },{},{ heal 0,-300; } +4878,Muscle_Fool,Muscle Fool,6,20,,10,,,,,,,,,,,,,{ autobonus2 "{ bonus bDef,1000; bonus2 bAddRace,RC_All,-50; bonus bMatkRate,-50; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD3; }"; },{},{ heal 0,-300; } +4879,Hawkeye,Hawkeye,6,20,,10,,,,,,,,,,,,,{ autobonus "{ bonus bDex,200; bonus2 bSPLossRate,50,1000; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_BASH3D6; }"; },{},{ heal 0,-300; } 4880,Lucky_Day,Lucky Day,6,20,,10,,,,,,,,,,,,,{ autobonus "{ bonus bLuk,200; }",10,5000,BF_WEAPON|BF_MAGIC,"{ specialeffect2 EF_DANCE_BLADE_ATK; }"; },{},{ heal 0,-300; } -4881,DelayafterAttack4Lv,DelayAfterAttack Lv4,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,10; bonus bDelayrate,-10; },{},{} -4882,ATK_+_1%,ATK+1%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,1; },{},{} -4883,MATK_+_1%,MATK+1%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,1; },{},{} -4884,HIT_+_1,HIT+1,6,10,,,,,,,,,,,,,,,{ bonus bHit,1; },{},{} -4885,Spell_1,Spell 1,6,10,,,,,,,,,,,,,,,{ bonus bMatk,5; bonus bVariableCastrate,-3; },{},{} -4886,Spell_2,Spell 2,6,10,,,,,,,,,,,,,,,{ bonus bMatk,10; bonus bVariableCastrate,-3; },{},{} -4887,Spell_3,Spell 3,6,10,,,,,,,,,,,,,,,{ bonus bMatk,15; bonus bVariableCastrate,-3; },{},{} -4888,Spell_4,Spell 4,6,10,,,,,,,,,,,,,,,{ bonus bMatk,20; bonus bVariableCastrate,-3; },{},{} -4889,Spell_5,Spell 5,6,10,,,,,,,,,,,,,,,{ bonus bMatk,30; bonus bVariableCastrate,-5; },{},{} -4890,MDEF+1,MDEF+1,6,10,,,,,,,,,,,,,,,{ bonus bMdef,1; },{},{} -4891,MDEF+3,MDEF+3,6,10,,,,,,,,,,,,,,,{ bonus bMdef,3; },{},{} -4892,MDEF+5,MDEF+5,6,10,,,,,,,,,,,,,,,{ bonus bMdef,5; },{},{} -4893,DEF+15,DEF+15,6,10,,,,,,,,,,,,,,,{ bonus bMdef,15; },{},{} -4894,ATK_+_4%,ATK+4%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,4; },{},{} -4895,ATK_+_5%,ATK+5%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,5; },{},{} -4896,MATK_+_2%,MATK+2%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,2; },{},{} -4897,MATK_+_3%,MATK+3%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,3; },{},{} -4898,MATK_+_4%,MATK+4%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,4; },{},{} -4899,MATK_+_5%,MATK+5%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,5; },{},{} -4900,MHP+5%,MaxHP+5%,6,10,,,,,,,,,,,,,,,{ bonus bMaxHPrate,5; },{},{} -4902,DEF+18,DEF+18,6,10,,,,,,,,,,,,,,,{ bonus bDef,18; },{},{} -4903,DEF+21,DEF+21,6,10,,,,,,,,,,,,,,,{ bonus bDef,21; },{},{} -4904,ATK_+_6%,ATK+6%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,6; },{},{} -4905,ATK_+_7%,ATK+7%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,7; },{},{} -4906,MATK_+_6,MATK+6,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,6; },{},{} -4907,MATK_+_7%,MATK+7%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,7; },{},{} -4908,Essence_of_Evil_STR1,Essence of Evil STR1,6,20,,10,,,,,,,,,,,,,{ bonus bStr,1; bonus bBaseAtk,3; bonus bInt,-1;},{},{} -4909,Essence_of_Evil_STR2,Essence of Evil STR2,6,20,,10,,,,,,,,,,,,,{ bonus bStr,2; bonus bBaseAtk,6; bonus bInt,-2;},{},{} -4910,Essence_of_Evil_STR3,Essence of Evil STR3,6,20,,10,,,,,,,,,,,,,{ bonus bStr,4; bonus bBaseAtk,12; bonus bInt,-4;},{},{} -4911,Essence_of_Evil_INT1,Essence of Evil INT1,6,20,,10,,,,,,,,,,,,,{ bonus bInt,1; bonus bMatk,3; bonus bStr,-1;},{},{} -4912,Essence_of_Evil_INT2,Essence of Evil INT2,6,20,,10,,,,,,,,,,,,,{ bonus bInt,2; bonus bMatk,6; bonus bStr,-2;},{},{} -4913,Essence_of_Evil_INT3,Essence of Evil INT3,6,20,,10,,,,,,,,,,,,,{ bonus bInt,4; bonus bMatk,12; bonus bStr,-4;},{},{} -4914,Essence_of_Evil_AGI1,Essence of Evil AGI1,6,20,,10,,,,,,,,,,,,,{ bonus bAgi,1; bonus bFlee,2; bonus bVit,-1;},{},{} -4915,Essence_of_Evil_AGI2,Essence of Evil AGI2,6,20,,10,,,,,,,,,,,,,{ bonus bAgi,2; bonus bFlee,4; bonus bVit,-2;},{},{} -4916,Essence_of_Evil_AGI3,Essence of Evil AGI3,6,20,,10,,,,,,,,,,,,,{ bonus bAgi,4; bonus bFlee,8; bonus bVit,-4;},{},{} -4917,Essence_of_Evil_VIT1,Essence of Evil VIT1,6,20,,10,,,,,,,,,,,,,{ bonus bVit,1; bonus bDef,3; bonus bMdef,2; bonus bAgi,-1;},{},{} -4918,Essence_of_Evil_VIT2,Essence of Evil VIT2,6,20,,10,,,,,,,,,,,,,{ bonus bVit,2; bonus bDef,6; bonus bMdef,4; bonus bAgi,-2;},{},{} -4919,Essence_of_Evil_VIT3,Essence of Evil VIT3,6,20,,10,,,,,,,,,,,,,{ bonus bVit,4; bonus bDef,12; bonus bMdef,8; bonus bAgi,-4;},{},{} -4920,Essence_of_Evil_DEX1,Essence of Evil DEX1,6,20,,10,,,,,,,,,,,,,{ bonus bDex,1; bonus bHit,2; bonus bLuk,-1;},{},{} -4921,Essence_of_Evil_DEX2,Essence of Evil DEX2,6,20,,10,,,,,,,,,,,,,{ bonus bDex,2; bonus bHit,4; bonus bLuk,-2;},{},{} -4922,Essence_of_Evil_DEX3,Essence of Evil DEX3,6,20,,10,,,,,,,,,,,,,{ bonus bDex,4; bonus bHit,8; bonus bLuk,-4;},{},{} -4923,Essence_of_Evil_LUK1,Essence of Evil LUK1,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,1; bonus bCritical,1; bonus bDex,-1;},{},{} -4924,Essence_of_Evil_LUK2,Essence of Evil LUK2,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,2; bonus bCritical,2; bonus bDex,-2;},{},{} -4925,Essence_of_Evil_LUK3,Essence of Evil LUK3,6,20,,10,,,,,,,,,,,,,{ bonus bLuk,4; bonus bCritical,4; bonus bDex,-4;},{},{} -4926,Critical_Lv1,Critical Lv1,6,10,,,,,,,,,,,,,,,{ bonus bCritical,1; },{},{} -4927,MaxHP+50,MaxHP+50,6,10,,,,,,,,,,,,,,,{ bonus bMaxHP,50; },{},{} -4928,MaxSP+10,MaxSP+10,6,10,,,,,,,,,,,,,,,{ bonus bMaxSP,10; },{},{} -4929,MSP+1%,MaxSP+1%,6,10,,,,,,,,,,,,,,,{ bonus bMaxSPrate,1; },{},{} -4930,Increase_Recovery,Increase Recovery,6,10,,0,,,,,,,,,,,,,{ bonus bHPrecovRate,2; bonus bSPrecovRate,2; },{},{} -4931,Healing_10,Healing 10,6,10,,,,,,,,,,,,,,,{ bonus2 bHPRegenRate,10,10000; },{},{} -4932,SP_Recovery_1,SP Recovery 1,6,10,,,,,,,,,,,,,,,{ bonus bSPGainValue,1; },{},{} -4933,Neutral_Properties_Lv1,Neutral Properties Lv1,6,10,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,1; },{},{} -4934,Neutral_Properties_Lv2,Neutral Properties Lv2,6,10,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,2; },{},{} -4935,Neutral_Properties_Lv3,Neutral Properties Lv3,6,10,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,3; },{},{} -4936,Large_Size_Attack_1,Large Size Attack 1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddSize,Size_Large,1; },{},{} -4937,Medium_Size_Attack_1,Medium Size Attack 1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddSize,Size_Medium,1; },{},{} -4938,Small_Size_Attack_1,Small Size Attack 1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddSize,Size_Small,1; },{},{} -4939,Critical_Lv2,Critical Lv2,6,10,,,,,,,,,,,,,,,{ bonus bCritical,2; },{},{} -4940,Cricital_Lv3,Critical Lv3,6,10,,,,,,,,,,,,,,,{ bonus bCritical,4; },{},{} -4941,Critical_Lv4,Critical Lv4,6,10,,,,,,,,,,,,,,,{ bonus bCritical,6; },{},{} -4942,Shedding_Lv1,Shedding Lv1,6,10,,,,,,,,,,,,,,,{ bonus bFlee2,2; },{},{} -4943,Shedding_Lv2,Shedding Lv2,6,10,,,,,,,,,,,,,,,{ bonus bFlee2,4; },{},{} -4944,Shedding_Lv3,Shedding Lv3,6,10,,,,,,,,,,,,,,,{ bonus bFlee2,5; },{},{} -4945,Saving_Lv1,Saving Lv1,6,10,,,,,,,,,,,,,,,{ bonus bUseSPrate,-2; },{},{} -4946,Saving_Lv2,Saving Lv2,6,10,,,,,,,,,,,,,,,{ bonus bUseSPrate,-4; },{},{} -4947,Saving_Lv3,Saving Lv3,6,10,,,,,,,,,,,,,,,{ bonus bUseSPrate,-6; },{},{} -4948,Delay_After_Skill_Lv1,Delay After Skill Lv1,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-2; },{},{} -4949,Delay_After_Skill_Lv2,Delay After Skill Lv2,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-4; },{},{} -4950,Delay_After_Skill_Lv3,Delay After Skill Lv3,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-6; },{},{} +4881,Attack_Delay_4,Attack Delay 4,6,10,,,,,,,,,,,,,,,{ bonus bAspdRate,10; bonus bDelayrate,-10; },{},{} +4882,Atk1p,ATK + 1%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,1; },{},{} +4883,Matk1p,MATK + 1%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,1; },{},{} +4884,Hit1_,HIT + 1,6,10,,,,,,,,,,,,,,,{ bonus bHit,1; },{},{} +4885,Conjure1,Spell 1,6,10,,,,,,,,,,,,,,,{ bonus bMatk,5; bonus bVariableCastrate,-3; },{},{} +4886,Conjure2,Spell 2,6,10,,,,,,,,,,,,,,,{ bonus bMatk,10; bonus bVariableCastrate,-3; },{},{} +4887,Conjure3,Spell 3,6,10,,,,,,,,,,,,,,,{ bonus bMatk,15; bonus bVariableCastrate,-3; },{},{} +4888,Conjure4,Spell 4,6,10,,,,,,,,,,,,,,,{ bonus bMatk,20; bonus bVariableCastrate,-3; },{},{} +4889,Conjure5,Spell 5,6,10,,,,,,,,,,,,,,,{ bonus bMatk,30; bonus bVariableCastrate,-5; },{},{} +4890,Mdef1,MDEF+1,6,10,,,,,,,,,,,,,,,{ bonus bMdef,1; },{},{} +4891,Mdef3,MDEF+3,6,10,,,,,,,,,,,,,,,{ bonus bMdef,3; },{},{} +4892,Mdef5,MDEF+5,6,10,,,,,,,,,,,,,,,{ bonus bMdef,5; },{},{} +4893,Def15,DEF+15,6,10,,,,,,,,,,,,,,,{ bonus bMdef,15; },{},{} +4894,Atk4p,ATK + 4%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,4; },{},{} +4895,Atk5p,ATK + 5%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,5; },{},{} +4896,Matk2p,MATK + 2%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,2; },{},{} +4897,Matk3p,MATK + 3%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,3; },{},{} +4898,Matk4p,MATK + 4%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,4; },{},{} +4899,Matk5p,MATK + 5%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,5; },{},{} +4900,MHP5,MHP+5%,6,10,,,,,,,,,,,,,,,{ bonus bMaxHPrate,5; },{},{} +4902,Def18,DEF+18,6,10,,,,,,,,,,,,,,,{ bonus bDef,18; },{},{} +4903,Def21,DEF+21,6,10,,,,,,,,,,,,,,,{ bonus bDef,21; },{},{} +4904,Atk6p,ATK + 6%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,6; },{},{} +4905,Atk7p,ATK + 7%,6,10,,,,,,,,,,,,,,,{ bonus bAtkRate,7; },{},{} +4906,Matk6p,MATK + 6,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,6; },{},{} +4907,Matk7p,MATK + 7%,6,10,,,,,,,,,,,,,,,{ bonus bMatkRate,7; },{},{} +4908,Force1,Darklord Essence Force1,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bStr,1; bonus bBaseAtk,3; bonus bInt,-1;},{},{} +4909,Force2,Darklord Essence Force2,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bStr,2; bonus bBaseAtk,6; bonus bInt,-2;},{},{} +4910,Force3,Darklord Essence Force3,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bStr,4; bonus bBaseAtk,12; bonus bInt,-4;},{},{} +4911,Intellect1,Darklord Essence Intelligence1,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bInt,1; bonus bMatk,3; bonus bStr,-1;},{},{} +4912,Intellect2,Darklord Essence Intelligence2,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bInt,2; bonus bMatk,6; bonus bStr,-2;},{},{} +4913,Intellect3,Darklord Essence Intelligence3,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bInt,4; bonus bMatk,12; bonus bStr,-4;},{},{} +4914,Swiftness1,Darklord Essence Speed1,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bAgi,1; bonus bFlee,2; bonus bVit,-1;},{},{} +4915,Swiftness2,Darklord Essence Speed2,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bAgi,2; bonus bFlee,4; bonus bVit,-2;},{},{} +4916,Swiftness3,Darklord Essence Speed3,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bAgi,4; bonus bFlee,8; bonus bVit,-4;},{},{} +4917,Tough1,Darklord Essence Vitality1,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bVit,1; bonus bDef,3; bonus bMdef,2; bonus bAgi,-1;},{},{} +4918,Tough2,Darklord Essence Vitality2,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bVit,2; bonus bDef,6; bonus bMdef,4; bonus bAgi,-2;},{},{} +4919,Tough3,Darklord Essence Vitality3,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bVit,4; bonus bDef,12; bonus bMdef,8; bonus bAgi,-4;},{},{} +4920,Artful1,Darklord Essence Concentration1,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bDex,1; bonus bHit,2; bonus bLuk,-1;},{},{} +4921,Artful2,Darklord Essence Concentration2,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bDex,2; bonus bHit,4; bonus bLuk,-2;},{},{} +4922,Artful3,Darklord Essence Concentration3,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bDex,4; bonus bHit,8; bonus bLuk,-4;},{},{} +4923,Fortune1,Darklord Essence Luck1,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bLuk,1; bonus bCritical,1; bonus bDex,-1;},{},{} +4924,Fortune2,Darklord Essence Luck2,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bLuk,2; bonus bCritical,2; bonus bDex,-2;},{},{} +4925,Fortune3,Darklord Essence Luck3,6,20,,10,,,,,0xFFFFFFFF,63,2,1021,,,,,{ bonus bLuk,4; bonus bCritical,4; bonus bDex,-4;},{},{} +4926,Critical_Lv1,Cri 1Lv,6,10,,,,,,,,,,,,,,,{ bonus bCritical,1; },{},{} +4927,HP50,MaxHP50,6,10,,,,,,,,,,,,,,,{ bonus bMaxHP,50; },{},{} +4928,SP10,MaxSP+10,6,10,,,,,,,,,,,,,,,{ bonus bMaxSP,10; },{},{} +4929,MSP1,MSP+1%,6,10,,,,,,,,,,,,,,,{ bonus bMaxSPrate,1; },{},{} +4930,HEAL2,Recovery UP,6,10,,0,,,,,,,,,,,,,{ bonus bHPrecovRate,2; bonus bSPrecovRate,2; },{},{} +4931,HEALHP1,Heal 10,6,10,,,,,,,,,,,,,,,{ bonus2 bHPRegenRate,10,10000; },{},{} +4932,HEALSP1,SP recovery1,6,10,,,,,,,,,,,,,,,{ bonus bSPGainValue,1; },{},{} +4933,Tolerance_Not1,Neutral Resistance Lv1,6,10,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,1; },{},{} +4934,Tolerance_Not2,Neutral Resistance Lv2,6,10,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,2; },{},{} +4935,Tolerance_Not3,Neutral Resistance Lv3,6,10,,,,,,,,,,,,,,,{ bonus2 bSubEle,Ele_Neutral,3; },{},{} +4936,ATK_BIG1,Attack big1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddSize,Size_Large,1; },{},{} +4937,ATK_MEDIUM1,Attack mid1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddSize,Size_Medium,1; },{},{} +4938,ATK_SMALL1,Attack small1,6,20,,10,,,,,,,,,,,,,{ bonus2 bAddSize,Size_Small,1; },{},{} +4939,Critical2,CRI Lv2,6,10,,,,,,,,,,,,,,,{ bonus bCritical,2; },{},{} +4940,Cricital3,CRI Lv3,6,10,,,,,,,,,,,,,,,{ bonus bCritical,4; },{},{} +4941,Critical4,CRI Lv4,6,10,,,,,,,,,,,,,,,{ bonus bCritical,6; },{},{} +4942,Dodge1,Parrying Lv1,6,10,,,,,,,,,,,,,,,{ bonus bFlee2,2; },{},{} +4943,Dodge2,Parrying Lv2,6,10,,,,,,,,,,,,,,,{ bonus bFlee2,4; },{},{} +4944,Dodge3,Parrying Lv3,6,10,,,,,,,,,,,,,,,{ bonus bFlee2,5; },{},{} +4945,Thrift1,Economy Lv1,6,10,,,,,,,,,,,,,,,{ bonus bUseSPrate,-2; },{},{} +4946,Thrift2,Economy Lv2,6,10,,,,,,,,,,,,,,,{ bonus bUseSPrate,-4; },{},{} +4947,Thrift3,Economy Lv3,6,10,,,,,,,,,,,,,,,{ bonus bUseSPrate,-6; },{},{} +4948,Skill_Delay1,After Skill Delay Lv1,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-2; },{},{} +4949,Skill_Delay2,After Skill Delay Lv2,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-4; },{},{} +4950,Skill_Delay3,After Skill Delay Lv3,6,10,,,,,,,,,,,,,,,{ bonus bDelayrate,-6; },{},{} //=================================================================== // More Headgears //=================================================================== @@ -11051,222 +11050,222 @@ //=================================================================== // Shadow Equipments //=================================================================== -24000,T_STR1_Armor_Shadow,T STR1 Armor Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,,,{ bonus bStr,1; },{},{} -24001,T_DEX1_Weapon_Shadow,T DEX1 Weapon Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,,,{ bonus bDex,1; },{},{} -24002,T_LUK1_Shield_Shadow,T LUK1 Shield Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,,,{ bonus bLuk,1; },{},{} -24003,T_AGI1_Shoes_Shadow,T AGI1 Shoes Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,,,{ bonus bAgi,1; },{},{} -24004,T_VIT1_Earrings_Shadow(R),T VIT1 Earrings Shadow(R),12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,,,{ bonus bVit,1; },{},{} -24005,T_INT1_Pendant_Shadow(L),T INT1 Pendant Shadow(L),12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,,,{ bonus bInt,1; },{},{} -24006,T_STR2_Armor_Shadow,T STR2 Armor Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,30,,,{ bonus bStr,2; },{},{} -24007,T_DEX2_Weapon_Shadow,T DEX2 Weapon Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,30,,,{ bonus bDex,2; },{},{} -24008,T_LUK2_Shield_Shadow,T LUK2 Shield Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,60,,,{ bonus bLuk,2; },{},{} -24009,T_AGI2_Shoes_Shadow,T AGI2 Shoes Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,90,,,{ bonus bAgi,2; },{},{} -24010,T_VIT2_Earrings_Shadow(R),T VIT2 Earrings Shadow(R),12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,120,,,{ bonus bVit,2; },{},{} -24011,T_INT2_Pendant_Shadow(L),T INT2 Pendant Shadow(L),12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,150,,,{ bonus bInt,2; },{},{} -24012,Promotional_Weapon_Shadow,Promotional Weapon Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,,,{ bonus bDex,1; },{},{} -24013,Promotional_Armor_Shadow,Promotional Armor Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,,,{ bonus bLuk,1; },{},{} -24014,Promotional_Shoes_Shadow,Promotional Shoes Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,,,{ bonus bAgi,1; },{},{} -24015,Promotional_Shield_Shadow,Promotional Shield Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,,,{ bonus bVit,1; },{},{} -24016,Promotional_Earrings_Shadow,Promotional Earrings Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,,,{ bonus bInt,1; },{},{} -24017,Promotional_Pendant_Shadow,Promotional Pendant Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,,,{ bonus bStr,1; },{},{} -24018,Shadow_Physical_Earring,Shadow Physical Earring,12,10,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bAspdRate,(getrefine()>=7)?2:1; },{},{} -24019,Shadow_Physical_Weapon,Shadow Physical Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bBaseAtk,10; if(getrefine()>=7) { bonus bAtkRate,1; } },{},{} -24020,Shadow_Physical_Pendant,Shadow Physical Pendant,12,10,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bMaxHP,100; if(getrefine()>=7) { bonus bMaxHPrate,1; } },{},{} -24021,Shadow_Magical_Earring,Shadow Magical Earring,12,10,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bVariableCastrate,-(getrefine()>=7)?2:1; },{},{} -24022,Shadow_Magical_Weapon,Shadow Magical Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bMatk,10; if(getrefine()>=7) { bonus bMatkRate,1; } },{},{} -24023,Shadow_Magical_Pendant,Shadow Magical Pendant,12,10,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bMaxSP,50; if(getrefine()>=7) { bonus bMaxSPrate,1; } },{},{} -24024,Shadow_Breeze_Armor,Shadow Breeze Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,,,{ bonus bFlee,5+(getrefine()>=7 ? 10 : 0); },{},{} -24025,Shadow_Champion_Shoes,Shadow Champion Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus bMaxHP,20; bonus bMaxSP,20; if(getrefine()>=7) { bonus bMaxHP,1; bonus bMaxSP,1; } },{},{} -24026,Shadow_Athena_Shield,Shadow Athena Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus bDef,(getrefine()>=7)?20:10; },{},{} -24027,Immune_Shadow_Armor,Immune Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubEle,0,1; },{},{} -24028,Hard_Shadow_Armor,Hard Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bMaxHP,50; if(getrefine()>=7) { bonus bMaxHPrate,1; } },{},{} -24029,Ancient_Shadow_Armor,Ancient Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bHit,(getrefine()>=7)?20:10; },{},{} -24030,Critital_Shadow_Armor,Critital Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bCritical,(getrefine()>=7)?10:5; },{},{} -24031,King_Bird_Shadow_Weapon,King Bird Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bBaseAtk,10; if(getrefine()>=7) { bonus bLongAtkRate,1; } },{},{} -24032,Critical_Hit_Shadow_Weapon,Critical Hit Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bBaseAtk,10; if(getrefine()>=7) { bonus bCritAtkRate,1; } },{},{} -24034,Lucky_Shadow_Weapon,Lucky Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bLuk,1; if(getrefine()>=7) { bonus bLuk,1; } if(getrefine()>=9) { bonus bLuk,1; } },{},{} -24033,Healing_Shadow_Weapon,Healing Shadow Weapon,12,10,,0,0:10,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ if (getrefine()>=7) bonus bHealPower2,5; },{},{} -24035,Power_Shadow_Earring,Power Shadow Earring,12,10,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bStr,1; .@r = getrefine(); if(.@r>=7) { bonus bStr,1; } if(.@r>=9) { bonus bStr,1; } },{},{} -24036,Ect_Shadow_Pendant,Ect Shadow Pendant,12,10,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bInt,1; .@r = getrefine(); if(.@r>=7) { bonus bInt,1; } if(.@r>=9) { bonus bInt,1; } },{},{} -24037,Dexter_travelers_Shadow_Armor,Dexter travelers Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bDex,1; .@r = getrefine(); if(.@r>=7) { bonus bDex,1; } if(.@r>=9) { bonus bDex,1; } },{},{} -24038,Vital_Shadow_Shoes,Vital Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus bVit,1; .@r = getrefine(); if(.@r>=7) { bonus bVit,1; } if(.@r>=9) { bonus bVit,1; } },{},{} -24039,Athletic_Shadow_Shield,Athletic Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus bAgi,1; .@r = getrefine(); if(.@r>=7) { bonus bAgi,1; } if(.@r>=9) { bonus bAgi,1; } },{},{} -24040,Lucky_Shadow_Armor,Lucky Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bLuk,1; bonus bCritical,(getrefine()/2); },{},{} -24041,Power_Shadow_Pendant,Power Shadow Pendant,12,10,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bStr,1; bonus bBaseAtk,getrefine(); },{},{} -24042,Ect_Shadow_Earring,Ect Shadow Earring,12,10,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bInt,1; bonus bMatk,getrefine(); },{},{} -24043,Dexter_Travelers_Shadow_Weapon,Dexter Travelers Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bDex,1; bonus bHit,getrefine(); },{},{} -24044,Vital_Shadow_Shield,Vital Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus bVit,1; bonus bDef,getrefine(); },{},{} -24045,Athletic_Shadow_Shoes,Athletic Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus bAgi,1; bonus bFlee,getrefine(); },{},{} -24046,Resist_Spell_Power_Shadow_Pendant,Resist Spell Power Shadow Pendant,12,10,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bMdef,(getrefine()>=7)?6:3; },{},{} -24047,Rapid_Shadow_Pendant,Rapid Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus bAspdRate,1+((.@r>=9)?2:(.@r>=7)?1:0); },{},{} -24048,Casters_Shadow_Pendant,Casters Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus bVariableCastrate,1+((.@r>=9)?2:(.@r>=7)?1:0); },{},{} -24049,Hard_Shadow_Earring,Hard Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMaxHP,100; .@r = getrefine(); bonus bMaxHPRate,((.@r>=9)?2:(.@r>=7)?1:0); },{},{} -24050,Wise_Shadow_Earring,Wise Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMaxSP,50; .@r = getrefine(); bonus bMaxSPRate,((.@r>=9)?2:(.@r>=7)?1:0); },{},{} -24051,Athena_Shadow_Earring,Athena Shadow Earring,12,10,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bDef,(getrefine()>=7)?20:10; },{},{} -24052,Cranial_Shadow_Shield,Cranial Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,7,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,7,1; } if(.@r>=9) { bonus2 bSubRace,7,1; } },{},{} -24053,Safeguard_Shadow_Shield,Safeguard Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,10,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,10,1; } if(.@r>=9) { bonus2 bSubRace,10,1; } },{},{} -24054,Brutal_Shadow_Shield,Brutal Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,2,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,2,1; } if(.@r>=9) { bonus2 bSubRace,2,1; } },{},{} -24055,Gargantua_Shadow_Shield,Gargantua Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,4,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,4,1; } if(.@r>=9) { bonus2 bSubRace,4,1; } },{},{} -24056,Homer's_Shadow_Shield,Homer's Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,5,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,5,1; } if(.@r>=9) { bonus2 bSubRace,5,1; } },{},{} -24057,Dragoon_Shadow_Shield,Dragoon Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,9,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,9,1; } if(.@r>=9) { bonus2 bSubRace,9,1; } },{},{} -24058,Satanic_Shadow_Shield,Satanic Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,8,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,8,1; } if(.@r>=9) { bonus2 bSubRace,8,1; } },{},{} -24059,Fire-Proof_Shadow_Shield,Fire-Proof Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,0,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,0,1; } if(.@r>=9) { bonus2 bSubRace,0,1; } },{},{} -24060,Requiem_Shadow_Shield,Requiem Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,1,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,1,1; } if(.@r>=9) { bonus2 bSubRace,1,1; } },{},{} -24061,Cadi_Shadow_Shield,Cadi Shadow Shield,12,10,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,3,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,3,1; } if(.@r>=9) { bonus2 bSubRace,3,1; } },{},{} -24062,Bloody_Shadow_Shoes,Bloody Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,7,1; bonus2 bMagicAddRace,7,1; } if(.@r>=9) { bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; } },{},{} -24063,Liberation_Shadow_Shoes,Liberation Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,10,1; bonus2 bMagicAddRace,10,1; } if(.@r>=9) { bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; } },{},{} -24064,Chemical_Shadow_Shoes,Chemical Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,3,1; bonus2 bMagicAddRace,3,1; } if(.@r>=9) { bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; } },{},{} -24065,Glamorous_Shadow_Shoes,Glamorous Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,2,1; bonus2 bMagicAddRace,2,1; } if(.@r>=9) { bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; } },{},{} -24066,Sekti_Side_Shadow_Shoes,Sekti Side Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,4,1; bonus2 bMagicAddRace,4,1; } if(.@r>=9) { bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; } },{},{} -24067,Fisher_Shadow_Shoes,Fisher Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,5,1; bonus2 bMagicAddRace,5,1; } if(.@r>=9) { bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; } },{},{} -24068,Seraphim_Shadow_Shoes,Seraphim Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,8,1; bonus2 bMagicAddRace,8,1; } if(.@r>=9) { bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; } },{},{} -24069,Beholder_Shadow_Shoes,Beholder Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,0,1; bonus2 bMagicAddRace,0,1; } if(.@r>=9) { bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; } },{},{} -24070,Divine_Shadow_Shoes,Divine Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,1,1; bonus2 bMagicAddRace,1,1; } if(.@r>=9) { bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; } },{},{} -24071,Dragoons_Shadow_Shoes,Dragoons Shadow Shoes,12,10,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,9,1; bonus2 bMagicAddRace,9,1; } if(.@r>=9) { bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; } },{},{} -24072,Large_Shadow_Armor,Large Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,2,1; } if(.@r>=9) { bonus2 bSubSize,2,2; } },{},{} -24073,Medium_Shadow_Armor,Medium Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,1,1; } if(.@r>=9) { bonus2 bSubSize,1,2; } },{},{} -24074,Small_Shadow_Armor,Small Shadow Armor,12,10,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,0,1; } if(.@r>=9) { bonus2 bSubSize,0,2; } },{},{} -24075,Large_Shadow_Weapon,Large Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus2 bAddSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,2,1; } if(.@r>=9) { bonus2 bAddSize,2,2; } },{},{} -24076,Medium_Shadow_Weapon,Medium Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus2 bAddSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,1,1; } if(.@r>=9) { bonus2 bAddSize,1,2; } },{},{} -24077,Small_Shadow_Weapon,Small Shadow Weapon,12,10,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus2 bAddSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,0,1; } if(.@r>=9) { bonus2 bAddSize,0,2; } },{},{} -24078,Spiritual_Shadow_Weapon,Spiritual Shadow Weapon,12,10,,0,,,,,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bUseSPrate,-5; if(getrefine()>=7){bonus bSPrecovRate,5;} },{},{} -24079,Spiritual_Shadow_Earring,Spiritual Shadow Earring,12,10,,0,,,,,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMaxSP,50; },{},{} -24080,Spiritual_Shadow_Pendant,Spiritual Shadow Pendant,12,10,,0,,,,,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bMaxSPrate,(getrefine()>=7?2:1); },{},{} -24081,Mali_Shas_Shadow_Armor,Mali Shas Shadow Armor,12,10,,0,,,,,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bMaxHP,100; if(getrefine()>=7){bonus bMaxHPrate,1;} },{},{} -24082,Mali_Shas_Shadow_Shoes,Mali Shas Shadow Shoes,12,10,,0,,,,,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bMaxHPrate,(getrefine()>=7?2:1); },{},{} -24083,Mali_Shas_Shadow_Shield,Mali Shas Shadow Shield,12,10,,0,,,,,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bHPrecovRate,(getrefine()>=7?10:5); },{},{} -24084,Gemstone_Shadow_Armor,Gemstone Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bCritical,5+(getrefine()/2); },{},{} -24085,Gemstone_Shadow_Shoes,Gemstone Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} -24086,Gemstone_Shadow_Shield,Gemstone Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bDef,5+(getrefine()/2); },{},{} -24087,Gemstone_Shadow_Weapon,Gemstone Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bHit,5+(getrefine()/2); },{},{} -24088,Gemstone_Shadow_Earring,Gemstone Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMatk,5+(getrefine()/2); },{},{} -24089,Gemstone_Shadow_Pendant,Gemstone Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bBaseAtk,5+(getrefine()/2); },{},{} -24090,Stability_Shadow_Shield,Stability Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bDef,3; .@r = getrefine(); bonus2 bResEff,Eff_Stun,.@r/2; bonus2 bResEff,Eff_Freeze,.@r/2; bonus2 bResEff,Eff_Curse,.@r/2; bonus2 bResEff,Eff_Bleeding,.@r/2; bonus2 bResEff,Eff_Stone,.@r; bonus2 bResEff,Eff_Sleep,.@r; bonus2 bResEff,Eff_Silence,.@r; bonus2 bResEff,Eff_Blind,.@r; },{},{} -24091,Harrods_Plaster_Shadow_Armor,Harrods Plaster Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine(); },{},{} -24092,Harrods_Plaster_Shadow_Shoes,Harrods Plaster Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine(); },{},{} -24093,Insomnia_Shadow_Armor,Insomnia Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine(); },{},{} -24094,Insomnia_Shadow_Shoes,Insomnia Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine(); },{},{} -24095,Peerless_Shadow_Armor,Peerless Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine(); },{},{} -24096,Peerless_Shadow_Shoes,Peerless Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine(); },{},{} -24097,Andre_Shadow_Armor,Andre Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine(); },{},{} -24098,Andre_Shadow_Shoes,Andre Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine(); },{},{} -24099,Freezing_Frozen_Shadow_Weapon,Freezing Frozen Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine(); },{},{} -24100,Freezing_Frozen_Shadow_Earring,Freezing Frozen Shadow Earring,12,10,,0,,,,,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine(); },{},{} -24101,Freezing_Frozen_Shadow_Pendant,Freezing Frozen Shadow Pendant,12,10,,0,,,,,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine(); },{},{} -24102,Vitality_Shadow_Earring,Vitality Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine(); },{},{} -24103,Vitality_Shadow_Pendant,Vitality Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine(); },{},{} -24104,Neutral_Shadow_Weapon,Neutral Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine()/2; },{},{} -24105,Neutral_Shadow_Earring,Neutral Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine(); },{},{} -24106,Neutral_Shadow_Pendant,Neutral Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine(); },{},{} -24107,Frozen_Curse_Shadow_Earring,Frozen Curse Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine(); },{},{} -24108,Frozen_Curse_Shadow_Pendant,Frozen Curse Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine(); },{},{} -24109,Caster_Shadow_Earrings,Caster Shadow Earrings,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bVariableCastrate,-1-((getrefine()>=7)?1:0); },{},{} -24110,Caster_Shadow_Weapon,Caster Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ .@r = getrefine(); bonus bVariableCastrate,-1-((.@r>=7)?1:0)-((.@r>=9)?2:0); },{},{} -24111,Spell_Flow_Shadow_Shoes,Spell Flow Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bUseSPrate,1; if(getrefine()>=7) bonus bSPrecovRate,5; },{},{} -24112,Spell_Flow_Shadow_Armor,Spell Flow Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bUseSPrate,1+((getrefine()>=7)?1:0)+((getrefine()>=9)?1:0); },{},{} -24113,Spell_Flow_Shadow_Shield,Spell Flow Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bUseSPrate,1; if(getrefine()>=7) bonus bMaxSPrate,1; },{},{} -24114,Grid_Shadow_Armor,Grid Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",100-(getrefine()*10); },{},{} -24115,Grid_Shadow_Shoes,Grid Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} -24116,Grid_Shadow_Shield,Grid Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} -24117,Grid_Shadow_Weapon,Grid Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} -24118,Grid_Shadow_Earring,Grid Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} -24119,Grid_Shadow_Pendant,Grid Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} -24120,Heal_Shadow_Armor,Heal Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} -24121,Heal_Shadow_Shoes,Heal Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} -24122,Heal_Shadow_Shield,Heal Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} -24123,Heal_Shadow_Weapon,Heal Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} -24124,Heal_Shadow_Earring,Heal Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} -24125,Heal_Shadow_Pendant,Heal Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} -24126,Hiding_Shadow_Armor,Hiding Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } -24127,Hiding_Shadow_Shoes,Hiding Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } -24128,Hiding_Shadow_Shield,Hiding Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } -24129,Hiding_Shadow_Weapon,Hiding Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } -24130,Hiding_Shadow_Earring,Hiding Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } -24131,Hiding_Shadow_Pendant,Hiding Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } -24132,Cloaking_Shadow_Armor,Cloaking Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } -24133,Cloaking_Shadow_Shoes,Cloaking Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } -24134,Cloaking_Shadow_Shield,Cloaking Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } -24135,Cloaking_Shadow_Weapon,Cloaking Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } -24136,Cloaking_Shadow_Earring,Cloaking Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } -24137,Cloaking_Shadow_Pendant,Cloaking Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } -24138,Teleport_Shadow_Armor,Teleport Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} -24139,Teleport_Shadow_Shoes,Teleport Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} -24140,Teleport_Shadow_Shield,Teleport Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} -24141,Teleport_Shadow_Weapon,Teleport Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} -24142,Teleport_Shadow_Earring,Teleport Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} -24143,Teleport_Shadow_Pendant,Teleport Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} -24144,Steal_Shadow_Armor,Steal Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} -24145,Steal_Shadow_Shoes,Steal Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} -24146,Steal_Shadow_Shield,Steal Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} -24147,Steal_Shadow_Weapon,Steal Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} -24148,Steal_Shadow_Earring,Steal Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} -24149,Steal_Shadow_Pendant,Steal Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} -24150,Infinity_Shadow_Earring,Infinity Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0); },{},{} -24151,Infinity_Shadow_Pendant,Infinity Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0); },{},{} -24152,Solid_Shadow_Weapon,Solid Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bBaseAtk,5+(getrefine()/2); },{},{} -24153,Solid_Shadow_Earring,Solid Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bHit,5+(getrefine()/2); },{},{} -24154,Solid_Shadow_Armor,Solid Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,5+(getrefine()/2); },{},{} -24155,Solid_Shadow_Pendant,Solid Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bMdef,(getrefine()/2); },{},{} -24156,Demi-Human_Shadow_Weapon,Demi-Human Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5+(getrefine()/2); },{},{} -24157,Exorcist_Shadow_Weapon,Exorcist Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Demon,5+(getrefine()/2); },{},{} -24158,Hunting_Shadow_Weapon,Hunting Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Brute,5+(getrefine()/2); },{},{} -24159,Insect_Shadow_Weapon,Insect Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Insect,5+(getrefine()/2); },{},{} -24160,Fishing_Shadow_Weapon,Fishing Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Fish,5+(getrefine()/2); },{},{} -24161,Dragon_Killer_Shadow_Weapon,Dragon Killer Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Dragon,5+(getrefine()/2); },{},{} -24162,Angelus_Shadow_Weapon,Angelus Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Angel,5+(getrefine()/2); },{},{} -24163,Formless_Shadow_Weapon,Formless Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Formless,5+(getrefine()/2); },{},{} -24164,Holy_Water_Shadow_Weapon,Holy Water Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Undead,5+(getrefine()/2); },{},{} -24165,Plant_Shadow_Weapon,Plant Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Plant,5+(getrefine()/2); },{},{} -24166,Penetration_Shadow_Earring,Penetration Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2); },{},{} -24167,Penetration_Shadow_Pendant,Penetration Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2); },{},{} -24168,Tempest_Shadow_Earring,Tempest Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2); },{},{} -24169,Tempest_Pendant_Shadow,Tempest Pendant Shadow,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2); },{},{} -24170,Magic_Demi-Human_Shadow_Weapon,Magic Demi-Human Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,5+(getrefine()/2); },{},{} -24171,Magic_Exorcist_Shadow_Weapon,Magic Exorcist Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Demon,5+(getrefine()/2); },{},{} -24172,Magic_Hunting_Shadow_Weapon,Magic Hunting Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Brute,5+(getrefine()/2); },{},{} -24173,Magic_Insect_Shadow_Weapon,Magic Insect Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Insect,5+(getrefine()/2); },{},{} -24174,Magic_Fishing_Shadow_Weapon,Magic Fishing Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Fish,5+(getrefine()/2); },{},{} -24175,Magic_Dragon_Killer_Shadow_Weapon,Magic Dragon Killer Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Dragon,5+(getrefine()/2); },{},{} -24176,Magic_Angelus_Shadow_Weapon,Magic Angelus Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Angel,5+(getrefine()/2); },{},{} -24177,Magic_Formless_Shadow_Weapon,Magic Formless Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Formless,5+(getrefine()/2); },{},{} -24178,Magic_Holy_Water_Shadow_Weapon,Magic Holy Water Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Undead,5+(getrefine()/2); },{},{} -24179,Magic_Caesars_Shadow_Weapon,Magic Caesars Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Plant,5+(getrefine()/2); },{},{} -24180,Bearer's_Shadow_Armor,Bearer's Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bMdef,1+(getrefine()/2); },{},{} -24181,Bearer's_Shadow_Shoes,Bearer's Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bMaxSP,50+(5*(getrefine()/2)); },{},{} -24182,Bearer's_Shadow_Shield,Bearer's Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bDef,5+(getrefine()/2); },{},{} -24183,Bearer's_Shadow_Weapon,Bearer's Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bMaxHP,100+(10*(getrefine()/2)); },{},{} -24184,Bearer's_Shadow_Earring,Bearer's Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMatk,5+(getrefine()/2); },{},{} -24185,Bearer's_Shadow_Pendant,Bearer's Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bBaseAtk,5+(getrefine()/2); },{},{} -24186,Basis_Shadow_Armor,Basis Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Neutral,1+(.@r/2); bonus2 bMagicAddEle,Ele_Neutral,1+(.@r/2); },{},{} -24187,Hallowed_Shadow_Armor,Hallowed Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Dark,1+(.@r/2); bonus2 bMagicAddEle,Ele_Dark,1+(.@r/2); },{},{} -24188,Underneith_Shadow_Armor,Underneith Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Water,1+(.@r/2); bonus2 bMagicAddEle,Ele_Water,1+(.@r/2); },{},{} -24189,Underneath_Shadow_Armor,Underneath Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Earth,1+(.@r/2); bonus2 bMagicAddEle,Ele_Earth,1+(.@r/2); },{},{} -24190,Flame_Shadow_Armor,Flame Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Fire,1+(.@r/2); bonus2 bMagicAddEle,Ele_Fire,1+(.@r/2); },{},{} -24191,Windy_Shadow_Armor,Windy Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Wind,1+(.@r/2); bonus2 bMagicAddEle,Ele_Wind,1+(.@r/2); },{},{} -24192,Envenom_Shadow_Armor,Envenom Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Poison,1+(.@r/2); bonus2 bMagicAddEle,Ele_Poison,1+(.@r/2); },{},{} -24193,Damned_Shadow_Armor,Damned Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Holy,1+(.@r/2); bonus2 bMagicAddEle,Ele_Holy,1+(.@r/2); },{},{} -24194,Exorcism_Shadow_Armor,Exorcism Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Ghost,1+(.@r/2); bonus2 bMagicAddEle,Ele_Ghost,1+(.@r/2); },{},{} -24195,Divine_Shadow_Armor,Divine Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Undead,1+(.@r/2); bonus2 bMagicAddEle,Ele_Undead,1+(.@r/2); },{},{} -24196,Hasty_Shadow_Shoes,Hasty Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} -24197,Hasty_Shadow_Armor,Hasty Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} -24198,Basis_Shadow_Shield,Basis Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24199,Hallowed_Shadow_Shield,Hallowed Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Dark,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24200,Saharic_Shadow_Shield,Saharic Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Water,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24201,Underneath_Shadow_Shield,Underneath Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Earth,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24202,Flammable_Shadow_Shield,Flammable Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Fire,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24203,Windy_Shadow_Shield,Windy Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Wind,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24204,Envenom_Shadow_Shield,Envenom Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Poison,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24205,Damned_Shadow_Shield,Damned Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Holy,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24206,Exorcism_Shadow_Shield,Exorcism Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Ghost,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24207,Divine_Shadow_Shield,Divine Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Undead,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24208,Expert_Shadow_Shoes,Expert Shadow Shoes,12,20,,100,,,,0,0xFFFFFFFF,63,2,524288,,150:175,1,,{ bonus2 bExpAddRace,RC_All,1; },{},{} -24209,Expert_Shield_Shadow,Expert Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,150:175,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/4); },{},{} -24210,Beginner_Shadow_Shoes,Beginner Shadow Shoes,12,20,,0,,,,0,0xFFFFFFFF,63,2,524288,,1:49,1,,{ bonus2 bExpAddRace,RC_All,getrefine(); },{},{} -24211,Beginner_Shadow_Shield,Beginner Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1:49,1,,{ bonus2 bExpAddRace,RC_All,getrefine(); },{},{} -24212,Rookie_Shadow_Shoes,Rookie Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,50:99,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/2); },{},{} -24213,Rookie_Shadow_Shield,Rookie Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,50:99,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/2); },{},{} -24214,Advanced_Shadow_Shoes,Advanced Shadow Shoes,12,20,,0,,,,0,0xFFFFFFFF,63,2,524288,,100:149,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/3); },{},{} -24215,Advanced_Shadow_Shield,Advanced Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,100:149,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/3); },{},{} +24000,T1_Shadow_Armor,Shadow Armor (Tier 1),12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,,,{ bonus bStr,1; },{},{} +24001,T1_Shadow_Weapon,Shadow Gauntlets (Tier 1),12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,,,{ bonus bDex,1; },{},{} +24002,T1_Shadow_Shield,Shadow Shield (Tier 1),12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,,,{ bonus bLuk,1; },{},{} +24003,T1_Shadow_Shoes,Shadow Shoes (Tier 1),12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,,,{ bonus bAgi,1; },{},{} +24004,T1_Shadow_R_Accessory,Shadow Ring (Tier 1),12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,,,{ bonus bVit,1; },{},{} +24005,T1_Shadow_L_Accessory,Shadow Pendant (Tier 1),12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,,,{ bonus bInt,1; },{},{} +24006,T2_Shadow_Armor,Shadow Armor (Tier 2),12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,30,,,{ bonus bStr,2; },{},{} +24007,T2_Shadow_Weapon,Shadow Gauntlets (Tier 2),12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,30,,,{ bonus bDex,2; },{},{} +24008,T2_Shadow_Shield,Shadow Shield (Tier 2),12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,60,,,{ bonus bLuk,2; },{},{} +24009,T2_Shadow_Shoes,Shadow Shoes (Tier 2),12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,90,,,{ bonus bAgi,2; },{},{} +24010,T2_Shadow_R_Accessory,Shadow Ring (Tier 2),12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,120,,,{ bonus bVit,2; },{},{} +24011,T2_Shadow_L_Accessory,Shadow Pendant (Tier 2),12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,150,,,{ bonus bInt,2; },{},{} +24012,S_Promotion_Weapon,Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,,,{ bonus bDex,1; },{},{} +24013,S_Promotion_Armor,Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,,,{ bonus bLuk,1; },{},{} +24014,S_Promotion_Shoes,Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,,,{ bonus bAgi,1; },{},{} +24015,S_Promotion_Shield,Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,,,{ bonus bVit,1; },{},{} +24016,S_Promotion_Earring,Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,,,{ bonus bInt,1; },{},{} +24017,S_Promotion_Pendant,Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,,,{ bonus bStr,1; },{},{} +24018,S_Physical_Earring,Physical Earring (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bAspdRate,(getrefine()>=7)?2:1; },{},{} +24019,S_Physical_Weapon,Physical Weapon (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bBaseAtk,10; if(getrefine()>=7) { bonus bAtkRate,1; } },{},{} +24020,S_Physical_Pendant,Physical Pendant (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bMaxHP,100; if(getrefine()>=7) { bonus bMaxHPrate,1; } },{},{} +24021,S_Magical_Earring,Magical Earring (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bVariableCastrate,-(getrefine()>=7)?2:1; },{},{} +24022,S_Magical_Weapon,Magical Weapon (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bMatk,10; if(getrefine()>=7) { bonus bMatkRate,1; } },{},{} +24023,S_Magical_Pendant,Magical Pencil (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bMaxSP,50; if(getrefine()>=7) { bonus bMaxSPrate,1; } },{},{} +24024,S_Breezy_Armor,Breeze Armor (Shadow),12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,,,{ bonus bFlee,5+(getrefine()>=7 ? 10 : 0); },{},{} +24025,S_Champion_Shoes,Champion Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus bMaxHP,20; bonus bMaxSP,20; if(getrefine()>=7) { bonus bMaxHP,1; bonus bMaxSP,1; } },{},{} +24026,S_Athena_Shield,Athena Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus bDef,(getrefine()>=7)?20:10; },{},{} +24027,S_Immune_Armor,Immune Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubEle,0,1; },{},{} +24028,S_Hard_Armor,Hard Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bMaxHP,50; if(getrefine()>=7) { bonus bMaxHPrate,1; } },{},{} +24029,S_Ancient_Armor,Ancient Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bHit,(getrefine()>=7)?20:10; },{},{} +24030,S_Critical_Armor,Critital Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bCritical,(getrefine()>=7)?10:5; },{},{} +24031,S_Kingbird_Weapon,Kingbird's Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bBaseAtk,10; if(getrefine()>=7) { bonus bLongAtkRate,1; } },{},{} +24032,S_Cri_Hit_Weapon,Critical Hit Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bBaseAtk,10; if(getrefine()>=7) { bonus bCritAtkRate,1; } },{},{} +24033,S_Healing_Weapon,Healing Shadow Weapon,12,0,,0,0:10,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ if (getrefine()>=7) bonus bHealPower2,5; },{},{} +24034,S_Lucky_Weapon,Lucky Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bLuk,1; if(getrefine()>=7) { bonus bLuk,1; } if(getrefine()>=9) { bonus bLuk,1; } },{},{} +24035,S_Power_Earring,Power Shadow Earring,12,0,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bStr,1; .@r = getrefine(); if(.@r>=7) { bonus bStr,1; } if(.@r>=9) { bonus bStr,1; } },{},{} +24036,S_Int_Pendant,Intelligent Shadow Pendant,12,0,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bInt,1; .@r = getrefine(); if(.@r>=7) { bonus bInt,1; } if(.@r>=9) { bonus bInt,1; } },{},{} +24037,S_Dexterous_Armor,Dexterous Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bDex,1; .@r = getrefine(); if(.@r>=7) { bonus bDex,1; } if(.@r>=9) { bonus bDex,1; } },{},{} +24038,S_Vital_Shoes,Vital Shadow Shoes,12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus bVit,1; .@r = getrefine(); if(.@r>=7) { bonus bVit,1; } if(.@r>=9) { bonus bVit,1; } },{},{} +24039,S_Athletic_Shield,Athletic Shadow Shield,12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus bAgi,1; .@r = getrefine(); if(.@r>=7) { bonus bAgi,1; } if(.@r>=9) { bonus bAgi,1; } },{},{} +24040,S_Lucky_Armor,Lucky Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus bLuk,1; bonus bCritical,(getrefine()/2); },{},{} +24041,S_Power_Pendant,Power Shadow Pendant,12,0,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bStr,1; bonus bBaseAtk,getrefine(); },{},{} +24042,S_Int_Earring,Intelligent Shadow Earring,12,0,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bInt,1; bonus bMatk,getrefine(); },{},{} +24043,S_Dexterous_Weapon,Dexterous Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bDex,1; bonus bHit,getrefine(); },{},{} +24044,S_Vital_Shield,Vital Shadow Shield,12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus bVit,1; bonus bDef,getrefine(); },{},{} +24045,S_Athletic_Shoes,Athletic Shadow Shoes,12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus bAgi,1; bonus bFlee,getrefine(); },{},{} +24046,S_Resist_Spell_Pendant,Resist Spell Power Pendant (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,2097152,,1,1,0,{ bonus bMdef,(getrefine()>=7)?6:3; },{},{} +24047,S_Rapid_Pendant,Rapid Pendant (Shadow),12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus bAspdRate,1+((.@r>=9)?2:(.@r>=7)?1:0); },{},{} +24048,S_Caster_Pendant,Caster Pendant (Shadow),12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus bVariableCastrate,1+((.@r>=9)?2:(.@r>=7)?1:0); },{},{} +24049,S_Hard_Earring,Hard Earring (Shadow),12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMaxHP,100; .@r = getrefine(); bonus bMaxHPRate,((.@r>=9)?2:(.@r>=7)?1:0); },{},{} +24050,S_Wise_Earring,Wise Earring (Shadow),12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMaxSP,50; .@r = getrefine(); bonus bMaxSPRate,((.@r>=9)?2:(.@r>=7)?1:0); },{},{} +24051,S_Athena_Earring,Athena Earring (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,1048576,,1,1,0,{ bonus bDef,(getrefine()>=7)?20:10; },{},{} +24052,S_Cranial_Shield,Cranial Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,7,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,7,1; } if(.@r>=9) { bonus2 bSubRace,7,1; } },{},{} +24053,S_Safeguard_Shield,Safeguard Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,10,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,10,1; } if(.@r>=9) { bonus2 bSubRace,10,1; } },{},{} +24054,S_Brutal_Shield,Brutal Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,2,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,2,1; } if(.@r>=9) { bonus2 bSubRace,2,1; } },{},{} +24055,S_Gargantua_Shield,Gargantua Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,4,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,4,1; } if(.@r>=9) { bonus2 bSubRace,4,1; } },{},{} +24056,S_Homers_Shield,Homers Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,5,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,5,1; } if(.@r>=9) { bonus2 bSubRace,5,1; } },{},{} +24057,S_Dragoon_Shield,Dragoon Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,9,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,9,1; } if(.@r>=9) { bonus2 bSubRace,9,1; } },{},{} +24058,S_Satanic_Shield,Satanic Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,8,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,8,1; } if(.@r>=9) { bonus2 bSubRace,8,1; } },{},{} +24059,S_Flameguard_Shield,Flameguard Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,0,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,0,1; } if(.@r>=9) { bonus2 bSubRace,0,1; } },{},{} +24060,S_Requiem_Shield,Requiem Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,1,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,1,1; } if(.@r>=9) { bonus2 bSubRace,1,1; } },{},{} +24061,S_Cadi_Shield,Cadi Shield (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,262144,,1,1,0,{ bonus2 bSubRace,3,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,3,1; } if(.@r>=9) { bonus2 bSubRace,3,1; } },{},{} +24062,S_Bloody_Shoes,Bloody Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,7,1; bonus2 bMagicAddRace,7,1; } if(.@r>=9) { bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; } },{},{} +24063,S_Liberation_Shoes,Liberation Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,10,1; bonus2 bMagicAddRace,10,1; } if(.@r>=9) { bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; } },{},{} +24064,S_Chemical_Shoes,Chemical Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,3,1; bonus2 bMagicAddRace,3,1; } if(.@r>=9) { bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; } },{},{} +24065,S_Clamorous_Shoes,Clamorous Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,2,1; bonus2 bMagicAddRace,2,1; } if(.@r>=9) { bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; } },{},{} +24066,S_Insecticide_Shoes,Insecticide Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,4,1; bonus2 bMagicAddRace,4,1; } if(.@r>=9) { bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; } },{},{} +24067,S_Fisher_Shoes,Fisher Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,5,1; bonus2 bMagicAddRace,5,1; } if(.@r>=9) { bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; } },{},{} +24068,S_Seraphim_Shoes,Seraphim Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,8,1; bonus2 bMagicAddRace,8,1; } if(.@r>=9) { bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; } },{},{} +24069,S_Beholder_Shoes,Beholder Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,0,1; bonus2 bMagicAddRace,0,1; } if(.@r>=9) { bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; } },{},{} +24070,S_Divine_Shoes,Divine Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,1,1; bonus2 bMagicAddRace,1,1; } if(.@r>=9) { bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; } },{},{} +24071,S_Dragoon_Shoes,Dragoon Shoes (Shadow),12,0,,0,,0,,0,0xFFFFFFFF,63,2,524288,,1,1,0,{ bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,9,1; bonus2 bMagicAddRace,9,1; } if(.@r>=9) { bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; } },{},{} +24072,S_Big_Armor,Large Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,2,1; } if(.@r>=9) { bonus2 bSubSize,2,2; } },{},{} +24073,S_Medium_Armor,Medium Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,1,1; } if(.@r>=9) { bonus2 bSubSize,1,2; } },{},{} +24074,S_Small_Armor,Small Shadow Armor,12,0,,0,,0,,0,0xFFFFFFFF,63,2,65536,,1,1,0,{ bonus2 bSubSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,0,1; } if(.@r>=9) { bonus2 bSubSize,0,2; } },{},{} +24075,S_Big_Weapon,Large Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus2 bAddSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,2,1; } if(.@r>=9) { bonus2 bAddSize,2,2; } },{},{} +24076,S_Medium_Weapon,Medium Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus2 bAddSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,1,1; } if(.@r>=9) { bonus2 bAddSize,1,2; } },{},{} +24077,S_Small_Weapon,Small Shadow Weapon,12,0,,0,,0,,0,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus2 bAddSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,0,1; } if(.@r>=9) { bonus2 bAddSize,0,2; } },{},{} +24078,S_Spiritual_Weapon,Spiritual Shadow Weapon,12,0,,0,,,,,0xFFFFFFFF,63,2,131072,,1,1,0,{ bonus bUseSPrate,-5; if(getrefine()>=7){bonus bSPrecovRate,5;} },{},{} +24079,S_Spiritual_Earring,Spiritual Shadow Earring,12,0,,0,,,,,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMaxSP,50; },{},{} +24080,S_Spiritual_Pendent,Spiritual Shadow Pendant,12,0,,0,,,,,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bMaxSPrate,(getrefine()>=7?2:1); },{},{} +24081,S_Malicious_Armor,Malicious Shas Shadow Armor,12,0,,0,,,,,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bMaxHP,100; if(getrefine()>=7){bonus bMaxHPrate,1;} },{},{} +24082,S_Malicious_Shoes,Malicious Shas Shadow Shoes,12,0,,0,,,,,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bMaxHPrate,(getrefine()>=7?2:1); },{},{} +24083,S_Malicious_Shield,Malicious Shas Shadow Shield,12,0,,0,,,,,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bHPrecovRate,(getrefine()>=7?10:5); },{},{} +24084,S_Gemstone_Armor,Gemstone Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bCritical,5+(getrefine()/2); },{},{} +24085,S_Gemstone_Shoes,Gemstone Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} +24086,S_Gemstone_Shield,Gemstone Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bDef,5+(getrefine()/2); },{},{} +24087,S_Gemstone_Weapon,Gemstone Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bHit,5+(getrefine()/2); },{},{} +24088,S_Gemstone_Earring,Gemstone Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMatk,5+(getrefine()/2); },{},{} +24089,S_Gemstone_Pendent,Gemstone Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bBaseAtk,5+(getrefine()/2); },{},{} +24090,S_Stability_Shield,Stability Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bDef,3; .@r = getrefine(); bonus2 bResEff,Eff_Stun,.@r/2; bonus2 bResEff,Eff_Freeze,.@r/2; bonus2 bResEff,Eff_Curse,.@r/2; bonus2 bResEff,Eff_Bleeding,.@r/2; bonus2 bResEff,Eff_Stone,.@r; bonus2 bResEff,Eff_Sleep,.@r; bonus2 bResEff,Eff_Silence,.@r; bonus2 bResEff,Eff_Blind,.@r; },{},{} +24091,S_Plasterer's_Armor,Harrods Plaster Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine(); },{},{} +24092,S_Plasterer's_Shoes,Harrods Plaster Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine(); },{},{} +24093,S_Insomniac_Armor,Insomnia Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine(); },{},{} +24094,S_Insomniac_Shoes,Insomnia Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine(); },{},{} +24095,S_Peerless_Armor,Peerless Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine(); },{},{} +24096,S_Peerless_Shoes,Peerless Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine(); },{},{} +24097,S_Adurate_Armor,Andre Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine(); },{},{} +24098,S_Adurate_Shoes,Andre Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine(); },{},{} +24099,Unfreez_Weapon_S,Unfreezing Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine(); },{},{} +24100,Unfreeze_Earing_S,Unfreezing Shadow Earring,12,10,,0,,,,,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine(); },{},{} +24101,Unfreeze_Pendent_S,Unfreezing Shadow Pendant,12,10,,0,,,,,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine(); },{},{} +24102,Vitality_Earing_S,Vitality Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine(); },{},{} +24103,Vitality_Pendant_S,Vitality Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine(); },{},{} +24104,S_Neutral_Weapon,Neutral Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine()/2; },{},{} +24105,S_Neutral_Earring,Neutral Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine(); },{},{} +24106,S_Neutral_Pendent,Neutral Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine(); },{},{} +24107,S_Curse_Lift_Earring,Frozen Curse Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine(); },{},{} +24108,S_Curse_Lift_Pendent,Frozen Curse Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine(); },{},{} +24109,S_Caster_earring,Caster Shadow Earrings,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bVariableCastrate,-1-((getrefine()>=7)?1:0); },{},{} +24110,S_Caster_Weapon,Caster Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ .@r = getrefine(); bonus bVariableCastrate,-1-((.@r>=7)?1:0)-((.@r>=9)?2:0); },{},{} +24111,S_Spell_Flow_Shoes,Spellflow Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bUseSPrate,1; if(getrefine()>=7) bonus bSPrecovRate,5; },{},{} +24112,S_Spell_Flow_Armor,Spellflow Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bUseSPrate,1+((getrefine()>=7)?1:0)+((getrefine()>=9)?1:0); },{},{} +24113,S_Spell_Flow_Shield,Spellflow Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bUseSPrate,1; if(getrefine()>=7) bonus bMaxSPrate,1; },{},{} +24114,S_Greed_Armor,Grid Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",100-(getrefine()*10); },{},{} +24115,S_Greed_Shoes,Grid Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} +24116,S_Greed_Shield,Grid Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} +24117,S_Greed_Weapon,Grid Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} +24118,S_Greed_Earring,Grid Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} +24119,S_Greed_Pendant,Grid Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10); },{},{} +24120,S_Heal_Armor,Heal Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} +24121,S_Heal_Shoes,Heal Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} +24122,S_Heal_Shield,Heal Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} +24123,S_Heal_Weapon,Heal Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} +24124,S_Heal_Earring,Heal Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} +24125,S_Heal_Pendant,Heal Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5); },{},{} +24126,S_Hiding_Armor,Hiding Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } +24127,S_Hiding_Shoes,Hiding Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } +24128,S_Hiding_Shield,Hiding Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } +24129,S_Hiding_Weapon,Hiding Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } +24130,S_Hiding_Earring,Hiding Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } +24131,S_Hiding_Pendant,Hiding Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5); },{},{ sc_end SC_HIDING; } +24132,S_Cloaking_Armor,Cloaking Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } +24133,S_Cloaking_Shoes,Cloaking Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } +24134,S_Cloaking_Shield,Cloaking Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } +24135,S_Cloaking_Weapon,Cloaking Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } +24136,S_Cloaking_Earring,Cloaking Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } +24137,S_Cloaking_Pendant,Cloaking Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5); },{},{ sc_end SC_CLOAKING; } +24138,S_Teleport_Armor,Teleport Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} +24139,S_Teleport_Shoes,Teleport Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} +24140,S_Teleport_Shield,Teleport Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} +24141,S_Teleport_Weapon,Teleport Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} +24142,S_Teleport_Earring,Teleport Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} +24143,S_Teleport_Pendant,Teleport Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5); },{},{} +24144,S_Steal_Armor,Steal Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} +24145,S_Steal_Shoes,Steal Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} +24146,S_Steal_Shield,Steal Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} +24147,S_Steal_Weapon,Steal Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} +24148,S_Steal_Earring,Steal Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} +24149,S_Steal_Pendant,Steal Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5); },{},{} +24150,S_Infinity_Earring,Infinity Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0); },{},{} +24151,S_Infinity_Pendant,Infinity Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0); },{},{} +24152,S_Solid_Weapon,Solid Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bBaseAtk,5+(getrefine()/2); },{},{} +24153,S_Solid_Earring,Solid Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bHit,5+(getrefine()/2); },{},{} +24154,S_Immortal_Armor,Solid Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bDef,5+(getrefine()/2); },{},{} +24155,S_Immortal_Pendant,Solid Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bMdef,(getrefine()/2); },{},{} +24156,S_Executioner_Weapon,Demi-Human Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5+(getrefine()/2); },{},{} +24157,S_Exorcist_Weapon,Exorcist Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Demon,5+(getrefine()/2); },{},{} +24158,S_Hunting_Weapon,Hunting Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Brute,5+(getrefine()/2); },{},{} +24159,S_Insect_Net_Weapon,Insect Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Insect,5+(getrefine()/2); },{},{} +24160,S_Fishing_Weapon,Fishing Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Fish,5+(getrefine()/2); },{},{} +24161,S_Dragon_Killer_Weapon,Dragon Killer Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Dragon,5+(getrefine()/2); },{},{} +24162,S_Corrupt_Weapon,Angelus Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Angel,5+(getrefine()/2); },{},{} +24163,S_Vibration_Weapon,Formless Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Formless,5+(getrefine()/2); },{},{} +24164,S_Holy_Water_Weapon,Holy Water Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Undead,5+(getrefine()/2); },{},{} +24165,S_Scissors_Weapon,Plant Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreDefRaceRate,RC_Plant,5+(getrefine()/2); },{},{} +24166,S_Penetration_Earring,Penetration Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2); },{},{} +24167,S_Penetration_Pendent,Penetration Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2); },{},{} +24168,S_Tempest_Earring,Tempest Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2); },{},{} +24169,S_Tempest_Pendent,Tempest Pendant Shadow,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2); },{},{} +24170,S_M_Executioner_Weapon,Magic Demi-Human Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,5+(getrefine()/2); },{},{} +24171,S_M_Exorcist_Weapon,Magic Exorcist Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Demon,5+(getrefine()/2); },{},{} +24172,S_M_Hunting_Weapon,Magic Hunting Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Brute,5+(getrefine()/2); },{},{} +24173,S_M_Insect_Net_Weapon,Magic Insect Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Insect,5+(getrefine()/2); },{},{} +24174,S_M_Fishing_Weapon,Magic Fishing Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Fish,5+(getrefine()/2); },{},{} +24175,S_M_Dragon_K_Weapon,Magic Dragon Killer Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Dragon,5+(getrefine()/2); },{},{} +24176,S_M_Corrupt_Weapon,Magic Angelus Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Angel,5+(getrefine()/2); },{},{} +24177,S_M_Vibration_Weapon,Magic Formless Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Formless,5+(getrefine()/2); },{},{} +24178,S_M_Holy_Water_Weapon,Magic Holy Water Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Undead,5+(getrefine()/2); },{},{} +24179,S_M_Scissors_Weapon,Magic Caesars Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus2 bIgnoreMdefRaceRate,RC_Plant,5+(getrefine()/2); },{},{} +24180,S_Bearers_Armor,Bearer's Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bMdef,1+(getrefine()/2); },{},{} +24181,S_Bearers_Shoes,Bearer's Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bMaxSP,50+(5*(getrefine()/2)); },{},{} +24182,S_Bearers_Shield,Bearer's Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bDef,5+(getrefine()/2); },{},{} +24183,S_Bearers_Weapon,Bearer's Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,1,1,,{ bonus bMaxHP,100+(10*(getrefine()/2)); },{},{} +24184,S_Bearers_Earring,Bearer's Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ bonus bMatk,5+(getrefine()/2); },{},{} +24185,S_Bearers_Pendent,Bearer's Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ bonus bBaseAtk,5+(getrefine()/2); },{},{} +24186,S_Basis_Armor,Basis Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Neutral,1+(.@r/2); bonus2 bMagicAddEle,Ele_Neutral,1+(.@r/2); },{},{} +24187,S_Hallowed_Armor,Hallowed Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Dark,1+(.@r/2); bonus2 bMagicAddEle,Ele_Dark,1+(.@r/2); },{},{} +24188,S_Saharic_Armor,Underneith Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Water,1+(.@r/2); bonus2 bMagicAddEle,Ele_Water,1+(.@r/2); },{},{} +24189,S_Underneath_Armor,Underneath Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Earth,1+(.@r/2); bonus2 bMagicAddEle,Ele_Earth,1+(.@r/2); },{},{} +24190,S_Flam_Armor,Flame Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Fire,1+(.@r/2); bonus2 bMagicAddEle,Ele_Fire,1+(.@r/2); },{},{} +24191,S_Windy_Armor,Windy Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Wind,1+(.@r/2); bonus2 bMagicAddEle,Ele_Wind,1+(.@r/2); },{},{} +24192,S_Envenom_Armor,Envenom Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Poison,1+(.@r/2); bonus2 bMagicAddEle,Ele_Poison,1+(.@r/2); },{},{} +24193,S_Damned_Armor,Damned Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Holy,1+(.@r/2); bonus2 bMagicAddEle,Ele_Holy,1+(.@r/2); },{},{} +24194,S_Geist_Armor,Exorcism Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Ghost,1+(.@r/2); bonus2 bMagicAddEle,Ele_Ghost,1+(.@r/2); },{},{} +24195,S_Divine_Armor,Divine Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Undead,1+(.@r/2); bonus2 bMagicAddEle,Ele_Undead,1+(.@r/2); },{},{} +24196,S_Hasty_Shoes,Hasty Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} +24197,S_Hasty_Armor,Hasty Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} +24198,S_Basis_Shield,Basis Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24199,S_Hallowed_Shield,Hallowed Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Dark,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24200,S_Saharic_Shield,Saharic Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Water,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24201,S_Underneath_Shield,Underneath Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Earth,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24202,S_Flam_Shield,Flame Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Fire,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24203,S_Windy_Shield,Windy Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Wind,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24204,S_Envenom_Shield,Envenom Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Poison,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24205,S_Damned_Shield,Damned Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Holy,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24206,S_Geist_Shield,Exorcism Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Ghost,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24207,S_Divine_Shield,Divine Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Undead,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24208,S_Expert_Shoes,Expert Shadow Shoes,12,20,,100,,,,0,0xFFFFFFFF,63,2,524288,,150:175,1,,{ bonus2 bExpAddRace,RC_All,1; },{},{} +24209,S_Expert_Shield,Expert Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,150:175,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/4); },{},{} +24210,S_Beginner_Shoes,Beginner Shadow Shoes,12,20,,0,,,,0,0xFFFFFFFF,63,2,524288,,1:49,1,,{ bonus2 bExpAddRace,RC_All,getrefine(); },{},{} +24211,S_Beginner_Shield,Beginner Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1:49,1,,{ bonus2 bExpAddRace,RC_All,getrefine(); },{},{} +24212,S_Rookie_Shoes,Rookie Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,50:99,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/2); },{},{} +24213,S_Rookie_Shield,Rookie Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,50:99,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/2); },{},{} +24214,S_Advanced_Shoes,Advanced Shadow Shoes,12,20,,0,,,,0,0xFFFFFFFF,63,2,524288,,100:149,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/3); },{},{} +24215,S_Advanced_Shield,Advanced Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,100:149,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/3); },{},{} 24216,Attack_Shadow_Armor,Attack Shadow Armor,12,10,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); autobonus "{ bonus bAtk2,(.@r*5); }",(.@r*20)+100,3000,BF_NORMAL; },{},{} 24217,Blitz_Shadow_Earring,Blitz Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); bonus bHit,(.@r/2)+5; if(.@r>=7){ bonus bAspd,1; } },{},{} 24218,Blitz_Shadow_Pendant,Blitz Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); bonus bAtk2,(.@r/2)+5; if(.@r>=7){ bonus bAspd,1; } },{},{} @@ -11282,18 +11281,18 @@ 24228,Soul_Shadow_Weapon,Soul Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,70,1,,{ .@r = getrefine(); bonus bMatkRate,(.@r<7)?1:((.@r<9)?2:3); },{},{} 24229,Soul_Shadow_Earring,Soul Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,70,1,,{ .@r = getrefine(); bonus bMatk,(5+.@r); if(.@r>=7) bonus bMaxHPrate,1; if(.@r>=9) bonus bMatkRate,1; },{},{} 24230,Soul_Shadow_Pendant,Soul Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,70,1,,{ .@r = getrefine(); bonus bMatk,(5+.@r); if(.@r>=7) bonus bMaxHPrate,1; if(.@r>=9) bonus bMatkRate,1; },{},{} -24231,Blitz_Shadow_Shoes,Blitz Shadow Shoes,12,10,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; } },{},{} -24232,Blitz_Shadow_Shield,Blitz Shadow Shield,12,10,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bCritical,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; } },{},{} -24233,Exceeding_Shadow_Weapon,Exceeding Shadow Weapon,12,10,,0,,,,0,0xFFFFFFFF,63,2,131072,,100,1,,{ .@r = getrefine()/2; bonus bBaseAtk,5; bonus bMatk,5; bonus bAtkRate,.@r; bonus bMatkRate,.@r; },{},{} -24234,Titan_Shadow_Earring,Titan Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate; },{},{} -24235,Titan_Shadow_Pendant,Titan Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate; },{},{} -24236,Boned_Shadow_Earring,Boned Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate; },{},{} -24237,Boned_Shadow_Pendant,Boned Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate; },{},{} -24238,Gigantic_Shadow_Earring,Gigantic Shadow Earring,12,10,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate; },{},{} -24239,Gigantic_Shadow_Pendant,Gigantic Shadow Pendant,12,10,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate; },{},{} -24243,Reload_Shadow_Shoes,Reload Shadow Shoes,12,20,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ .@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3); },{},{} -24244,Reload_Shadow_Shield,Reload Shadow Shield,12,20,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3); },{},{} -24245,Reload_Shadow_Armor,Reload Shadow Armor,12,20,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3); },{},{} +24231,S_Blitz_Shoes,Blitz Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; } },{},{} +24232,S_Blitz_Shield,Blitz Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ bonus bCritical,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; } },{},{} +24233,S_Exceed_Weapon,Exceeding Shadow Weapon,12,0,,0,,,,0,0xFFFFFFFF,63,2,131072,,100,1,,{ .@r = getrefine()/2; bonus bBaseAtk,5; bonus bMatk,5; bonus bAtkRate,.@r; bonus bMatkRate,.@r; },{},{} +24234,S_Titan_Earring,Titan Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate; },{},{} +24235,S_Titan_Pendant,Titan Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate; },{},{} +24236,S_Boned_Earring,Boned Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate; },{},{} +24237,S_Boned_Pendant,Boned Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate; },{},{} +24238,S_Gigantic_Earring,Gigantic Shadow Earring,12,0,,0,,,,0,0xFFFFFFFF,63,2,1048576,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate; },{},{} +24239,S_Gigantic_Pendant,Gigantic Shadow Pendant,12,0,,0,,,,0,0xFFFFFFFF,63,2,2097152,,1,1,,{ .@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate; },{},{} +24243,S_Reload_Shoes,Reload Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ .@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3); },{},{} +24244,S_Reload_Shield,Reload Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3); },{},{} +24245,S_Reload_Armor,Reload Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3); },{},{} // 25132,Pumpkin_Deco,Pumpkin Deco,3,0,,0,,,,,,,,,,,,,{},{},{} 25133,Dried_White_Stem,Dried White Stem,3,0,,0,,,,,,,,,,,,,{},{},{} From cf482a1f05bfc0f26fa9f355ed1c39316a6dfd00 Mon Sep 17 00:00:00 2001 From: rAthenaAPI <administrator@rathena.org> Date: Tue, 1 Nov 2016 06:13:27 +0100 Subject: [PATCH 40/67] SQL synchronization --- sql-files/item_db_re.sql | 771 +++++++++++++++++++-------------------- 1 file changed, 385 insertions(+), 386 deletions(-) diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index 5688148138..a51080904e 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -2966,24 +2966,24 @@ REPLACE INTO `item_db_re` VALUES (4764,'Critical5','CRI+5',6,20,NULL,10,NULL,NUL REPLACE INTO `item_db_re` VALUES (4765,'Critical7','CRI+7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,7;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4766,'Atk2','ATK+2%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,2;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4767,'Atk3','ATK+3%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4768,'Str1_J','STR+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4769,'Str2_J','STR+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4770,'Str3_J','STR+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4771,'Int1_J','INT+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4772,'Int2_J','INT+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4773,'Int3_J','INT+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4774,'Vit1_J','VIT+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4775,'Vit2_J','VIT+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4776,'Vit3_J','VIT+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4777,'Agi1_J','AGI+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4778,'Agi2_J','AGI+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4779,'Agi3_J','AGI+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4780,'Dex1_J','DEX+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4781,'Dex2_J','DEX+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4782,'Dex3_J','DEX+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4783,'Luk1_J','LUK+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4784,'Luk2_J','LUK+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4785,'Luk3_J','LUK+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4768,'Str1_J','Str + 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4769,'Str2_J','Str + 2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4770,'Str3_J','Str + 3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4771,'Int1_J','Int + 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4772,'Int2_J','Int + 2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4773,'Int3_J','Int + 3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4774,'Vit1_J','Vit + 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4775,'Vit2_J','Vit + 2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4776,'Vit3_J','Vit + 3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4777,'Agi1_J','Agi + 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4778,'Agi2_J','Agi + 2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4779,'Agi3_J','Agi + 3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4780,'Dex1_J','Dex + 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4781,'Dex2_J','Dex + 2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4782,'Dex3_J','Dex + 3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4783,'Luk1_J','Luk + 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4784,'Luk2_J','Luk + 2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4785,'Luk3_J','Luk + 3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (4786,'Mdef2','MDEF+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,2;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4787,'Mdef4','MDEF+4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,4;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4788,'Mdef6','MDEF+6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,6;',NULL,NULL); @@ -3001,153 +3001,152 @@ REPLACE INTO `item_db_re` VALUES (4799,'HP500','HP+500',6,20,NULL,10,NULL,NULL,N REPLACE INTO `item_db_re` VALUES (4800,'SP50','SP+50',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,50;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4801,'SP100','SP+100',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,100;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4802,'SP150','SP+150',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,150;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4803,'Highness_Heal_3sec','Recovery Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSkillCooldown,"AB_HIGHNESSHEAL",-3000;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4804,'Coluceo_Heal30','Cathedral Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSkillUseSP,"AB_CHEAL",30;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4805,'Heal_Amount2','Archbishop Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4803,'Highness_Heal_3sec','Cure1Lv.',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSkillCooldown,"AB_HIGHNESSHEAL",-3000;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4804,'Coluceo_Heal30','Catholic1Lv.',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSkillUseSP,"AB_CHEAL",30;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4805,'Heal_Amount2','Archbishop1Lv',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,3;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4806,'Matk3','MATK+3%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,3; bonus bFixedCastrate,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4807,'Atk_Speed1','ASPD+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspd,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4808,'Fighting_Spirit4','Fighting Lv4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,15; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4809,'Fighting_Spirit3','Fighting Lv3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,12; bonus bHit,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4810,'Fighting_Spirit2','Fighting Lv2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,9; bonus bHit,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4811,'Fighting_Spirit1','Fighting Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,6; bonus bHit,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4812,'Spell4','Force Lv4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,15; bonus bVariableCastrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4813,'Spell3','Force Lv3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,12; bonus bVariableCastrate,-8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4814,'Spell2','Force Lv2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,9; bonus bVariableCastrate,-6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4815,'Spell1','Force Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,6; bonus bVariableCastrate,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4816,'Sharp3','Sharp Lv3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,12; bonus bHit,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4817,'Sharp2','Sharp Lv2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,9; bonus bHit,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4818,'Sharp1','Sharp Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,6; bonus bHit,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4819,'Atk1','ATK+1%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4820,'Fighting_Spirit5','Fighting Lv5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,18; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4821,'Fighting_Spirit6','Fighting Lv6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,21; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4822,'Fighting_Spirit7','Fighting Lv7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,24; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4823,'Fighting_Spirit8','Fighting Lv8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,27; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4824,'Fighting_Spirit9','Fighting Lv9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4825,'Fighting_Spirit10','Fighting Lv10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,50; bonus bHit,15;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4826,'Spell5','Force Lv5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,18; bonus bVariableCastrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4827,'Spell6','Force Lv6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,21; bonus bVariableCastrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4828,'Spell7','Force Lv7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,24; bonus bVariableCastrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4829,'Spell8','Force Lv8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,27; bonus bVariableCastrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4830,'Spell9','Force Lv9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,30; bonus bVariableCastrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4831,'Spell10','Force Lv10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,50; bonus bVariableCastrate,-20;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4832,'Expert_Archer1','Archer Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4833,'Expert_Archer2','Archer Lv2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4834,'Expert_Archer3','Archer Lv3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4835,'Expert_Archer4','Archer Lv4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4836,'Expert_Archer5','Archer Lv5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4837,'Expert_Archer6','Archer Lv6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,12;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4838,'Expert_Archer7','Archer Lv7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,14;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4839,'Expert_Archer8','Archer Lv8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,16;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4840,'Expert_Archer9','Archer Lv9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,18;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4841,'Expert_Archer10','Archer Lv10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,20; bonus bAspd,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4842,'Atk_Speed2','ASPD+2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspd,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4843,'Sharp4','Sharp Lv4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,14; bonus bHit,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4844,'Sharp5','Sharp Lv5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,15; bonus bHit,6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4807,'Atk_Speed1','Atk Speed1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspd,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4808,'Fighting_Spirit4','Fighting Spirit4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,15; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4809,'Fighting_Spirit3','Fighting Spirit3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,12; bonus bHit,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4810,'Fighting_Spirit2','Fighting Spirit2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,9; bonus bHit,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4811,'Fighting_Spirit1','Fighting Spirit1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,6; bonus bHit,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4812,'Spell4','Spell4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,15; bonus bVariableCastrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4813,'Spell3','Spell3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,12; bonus bVariableCastrate,-8;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4814,'Spell2','Spell2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,9; bonus bVariableCastrate,-6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4815,'Spell1','Spell1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,6; bonus bVariableCastrate,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4816,'Sharp3','Sharp3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,12; bonus bHit,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4817,'Sharp2','Sharp2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,9; bonus bHit,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4818,'Sharp1','Sharp1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,6; bonus bHit,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4819,'Atk1','Atk1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4820,'Fighting_Spirit5','Fighting Spirit5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,18; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4821,'Fighting_Spirit6','Fighting Spirit6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,21; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4822,'Fighting_Spirit7','Fighting Spirit7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,24; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4823,'Fighting_Spirit8','Fighting Spirit8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,27; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4824,'Fighting_Spirit9','Fighting Spirit9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4825,'Fighting_Spirit10','Fighting Spirit10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,50; bonus bHit,15;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4826,'Spell5','Spell5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,18; bonus bVariableCastrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4827,'Spell6','Spell6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,21; bonus bVariableCastrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4828,'Spell7','Spell7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,24; bonus bVariableCastrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4829,'Spell8','Spell8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,27; bonus bVariableCastrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4830,'Spell9','Spell9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,30; bonus bVariableCastrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4831,'Spell10','Spell10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,50; bonus bVariableCastrate,-20;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4832,'Expert_Archer1','Expert Archer1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4833,'Expert_Archer2','Expert Archer2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4834,'Expert_Archer3','Expert Archer3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4835,'Expert_Archer4','Expert Archer4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,8;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4836,'Expert_Archer5','Expert Archer5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4837,'Expert_Archer6','Expert Archer6',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,12;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4838,'Expert_Archer7','Expert Archer7',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,14;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4839,'Expert_Archer8','Expert Archer8',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,16;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4840,'Expert_Archer9','Expert Archer9',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,18;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4841,'Expert_Archer10','Expert Archer10',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLongAtkRate,20; bonus bAspd,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4842,'Atk_Speed2','Atk Speed2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspd,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4843,'Sharp4','Sharp4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,14; bonus bHit,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4844,'Sharp5','Sharp5',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,15; bonus bHit,6;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4845,'Sea_Energy','Strength Of Ocean',6,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -#REPLACE INTO `item_db_re` VALUES (4845,'Cobble_Stone','Cobble Stone',6,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4846,'2011val_Angel','Fully Loved Stone',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,10; bonus bMatk,10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4847,'2011val_Devil','Spelled Stone',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,10; bonus bMatk,10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4848,'Immuned1','Immune Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4849,'Cranial1','Crescent Lv1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4850,'Heal_Amount3','Archbishop Lv2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,6; bonus bUseSPrate,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4851,'Heal_Amount4','Archbishop Lv3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,12; bonus bUseSPrate,10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4852,'Heal_Amount5','Archbishop Lv4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,20; bonus bUseSPrate,15;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4853,'S_STR','Special STR',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bStr,1; .@r = getrefine(); if(.@r>7) { bonus bStr,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4854,'S_AGI','Special AGI',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAgi,1; .@r = getrefine(); if(.@r>7) { bonus bAgi,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4855,'S_VIT','Special VIT',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bVit,1; .@r = getrefine(); if(.@r>7) { bonus bVit,3; } if(.@r>8) { bonus bMaxSPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4856,'S_INT','Special INT',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bInt,1; .@r = getrefine(); if(.@r>7) { bonus bInt,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4857,'S_DEX','Special DEX',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDex,1; .@r = getrefine(); if(.@r>7) { bonus bDex,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4858,'S_LUK','Special LUK',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,1; .@r = getrefine(); if(.@r>7) { bonus bLuk,3; } if(.@r>8) { bonus bMaxHPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4859,'Evasion1','Flee+1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4860,'Evasion3','Flee+3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4861,'MHP1','MaxHP+1%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4862,'MHP2','MaxHP+2%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4863,'Fatal1Lv','Fatal Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,4; bonus bCritical,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4864,'Fatal2Lv','Fatal Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,6; bonus bCritical,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4865,'Fatal3Lv','Fatal Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,8; bonus bCritical,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4866,'Fatal4Lv','Fatal Lv4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus bCritical,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4867,'MHP3','MaxHP+3%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4868,'MHP4','MaxHP+4%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4869,'DelayafterAttack1Lv','DelayAfterAttack Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,4; bonus bDelayrate,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4846,'2011Valentin_Angel','Fully Loved Stone',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,10; bonus bMatk,10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4847,'2011Valentin_Devil','Spelled Stone',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bBaseAtk,10; bonus bMatk,10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4848,'Immuned1','Immune Level 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4849,'Cranial1','Cranial Level 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4850,'Heal_Amount3','Heal Amount2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,6; bonus bUseSPrate,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4851,'Heal_Amount4','Heal Amount3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,12; bonus bUseSPrate,10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4852,'Heal_Amount5','Heal Amount4',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHealPower,20; bonus bUseSPrate,15;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4853,'S_Str','Special Str',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bStr,1; .@r = getrefine(); if(.@r>7) { bonus bStr,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4854,'S_Agi','Special Agi',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAgi,1; .@r = getrefine(); if(.@r>7) { bonus bAgi,3; } if(.@r>8) { bonus2 bAddClass,Class_All,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4855,'S_Vital','Special Vit',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bVit,1; .@r = getrefine(); if(.@r>7) { bonus bVit,3; } if(.@r>8) { bonus bMaxSPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4856,'S_Int','Special Int',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bInt,1; .@r = getrefine(); if(.@r>7) { bonus bInt,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4857,'S_Dex','Special Dex',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDex,1; .@r = getrefine(); if(.@r>7) { bonus bDex,3; } if(.@r>8) { bonus bMatkRate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4858,'S_Luck','Special Luk',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,1; .@r = getrefine(); if(.@r>7) { bonus bLuk,3; } if(.@r>8) { bonus bMaxHPrate,1; } if(.@r>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4859,'Evasion1','Evasion1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4860,'Evasion3','Evasion3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4861,'MHP1','MHP+1%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4862,'MHP2','MHP+2%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4863,'Fatal1','Fatal1Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,4; bonus bCritical,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4864,'Fatal2','Fatal2Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,6; bonus bCritical,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4865,'Fatal3','Fatal3Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,8; bonus bCritical,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4866,'Fatal4','Fatal4Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,10; bonus bCritical,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4867,'MHP3','MHP+3%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4868,'MHP4','MHP+4%',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4869,'Attack_Delay_1','DelayafterAttack1Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,4; bonus bDelayrate,-4;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4870,'SP25','SP+25',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,25;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4871,'SP75','SP+75',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,75;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4872,'DelayafterAttack2Lv','DelayAfterAttack Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,6; bonus bDelayrate,-6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4873,'DelayafterAttack3Lv','DelayAfterAttack Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,8; bonus bDelayrate,-8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4875,'Strength_of_Bear','Strength of Bear',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*TODO: Confirm the rate*/ autobonus2 "{ bonus bStr,200; bonus2 bHPLossRate,500,1000; }",10,5000,BF_WEAPON,"{ active_transform 1060,5000; specialeffect2 EF_FIRESPLASHHIT; }";',NULL,'heal 0,-300;'); +REPLACE INTO `item_db_re` VALUES (4872,'Attack_Delay_2','DelayafterAttack2Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,6; bonus bDelayrate,-6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4873,'Attack_Delay_3','DelayafterAttack3Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,8; bonus bDelayrate,-8;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4875,'Bear\'s_Power','Bear\'s Power',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus2 "{ bonus bStr,200; bonus2 bHPLossRate,500,1000; }",20,5000,BF_WEAPON,"{ active_transform 1060,5000; specialeffect2 EF_POTION_BERSERK; showscript \\\"Bigfoot Power !\\\"; }";',NULL,NULL); REPLACE INTO `item_db_re` VALUES (4876,'Runaway_Magic','Runaway Magic',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus "{ bonus bInt,200; bonus2 bSPLossRate,200,1000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_LAMADAN; }";',NULL,'heal 0,-2000;'); REPLACE INTO `item_db_re` VALUES (4877,'Speed_of_Light','Speed of Light',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*TODO: Confirm the rate*/ autobonus "{ bonus bAspdRate,100; bonus bFlee,100; bonus2 bHPLossRate,400,1000; bonus2 bSPLossRate,50,1000;}",10,5000,BF_WEAPON,"{ specialeffect2 EF_AGIUP2; }";',NULL,'heal 0,-300;'); -REPLACE INTO `item_db_re` VALUES (4878,'Muscular_Endurance','Muscular Endurance',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus2 "{ bonus bDef,1000; bonus2 bAddRace,RC_All,-50; bonus bMatkRate,-50; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD3; }";',NULL,'heal 0,-300;'); -REPLACE INTO `item_db_re` VALUES (4879,'Hawk_Eye','Hawk Eye',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus "{ bonus bDex,200; bonus2 bSPLossRate,50,1000; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_BASH3D6; }";',NULL,'heal 0,-300;'); +REPLACE INTO `item_db_re` VALUES (4878,'Muscle_Fool','Muscle Fool',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus2 "{ bonus bDef,1000; bonus2 bAddRace,RC_All,-50; bonus bMatkRate,-50; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD3; }";',NULL,'heal 0,-300;'); +REPLACE INTO `item_db_re` VALUES (4879,'Hawkeye','Hawkeye',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus "{ bonus bDex,200; bonus2 bSPLossRate,50,1000; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_BASH3D6; }";',NULL,'heal 0,-300;'); REPLACE INTO `item_db_re` VALUES (4880,'Lucky_Day','Lucky Day',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'autobonus "{ bonus bLuk,200; }",10,5000,BF_WEAPON|BF_MAGIC,"{ specialeffect2 EF_DANCE_BLADE_ATK; }";',NULL,'heal 0,-300;'); -REPLACE INTO `item_db_re` VALUES (4881,'DelayafterAttack4Lv','DelayAfterAttack Lv4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,10; bonus bDelayrate,-10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4882,'ATK_+_1%','ATK+1%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4883,'MATK_+_1%','MATK+1%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4884,'HIT_+_1','HIT+1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHit,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4885,'Spell_1','Spell 1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,5; bonus bVariableCastrate,-3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4886,'Spell_2','Spell 2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus bVariableCastrate,-3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4887,'Spell_3','Spell 3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,15; bonus bVariableCastrate,-3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4888,'Spell_4','Spell 4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,20; bonus bVariableCastrate,-3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4889,'Spell_5','Spell 5',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,30; bonus bVariableCastrate,-5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4890,'MDEF+1','MDEF+1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4891,'MDEF+3','MDEF+3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4892,'MDEF+5','MDEF+5',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4893,'DEF+15','DEF+15',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,15;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4894,'ATK_+_4%','ATK+4%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4895,'ATK_+_5%','ATK+5%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4896,'MATK_+_2%','MATK+2%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4897,'MATK_+_3%','MATK+3%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4898,'MATK_+_4%','MATK+4%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4899,'MATK_+_5%','MATK+5%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4900,'MHP+5%','MaxHP+5%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4902,'DEF+18','DEF+18',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDef,18;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4903,'DEF+21','DEF+21',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDef,21;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4904,'ATK_+_6%','ATK+6%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4905,'ATK_+_7%','ATK+7%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,7;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4906,'MATK_+_6','MATK+6',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4907,'MATK_+_7%','MATK+7%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,7;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4908,'Essence_of_Evil_STR1','Essence of Evil STR1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bStr,1; bonus bBaseAtk,3; bonus bInt,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4909,'Essence_of_Evil_STR2','Essence of Evil STR2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bStr,2; bonus bBaseAtk,6; bonus bInt,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4910,'Essence_of_Evil_STR3','Essence of Evil STR3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bStr,4; bonus bBaseAtk,12; bonus bInt,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4911,'Essence_of_Evil_INT1','Essence of Evil INT1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus bMatk,3; bonus bStr,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4912,'Essence_of_Evil_INT2','Essence of Evil INT2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bInt,2; bonus bMatk,6; bonus bStr,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4913,'Essence_of_Evil_INT3','Essence of Evil INT3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bInt,4; bonus bMatk,12; bonus bStr,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4914,'Essence_of_Evil_AGI1','Essence of Evil AGI1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAgi,1; bonus bFlee,2; bonus bVit,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4915,'Essence_of_Evil_AGI2','Essence of Evil AGI2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAgi,2; bonus bFlee,4; bonus bVit,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4916,'Essence_of_Evil_AGI3','Essence of Evil AGI3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAgi,4; bonus bFlee,8; bonus bVit,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4917,'Essence_of_Evil_VIT1','Essence of Evil VIT1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bVit,1; bonus bDef,3; bonus bMdef,2; bonus bAgi,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4918,'Essence_of_Evil_VIT2','Essence of Evil VIT2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bVit,2; bonus bDef,6; bonus bMdef,4; bonus bAgi,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4919,'Essence_of_Evil_VIT3','Essence of Evil VIT3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bVit,4; bonus bDef,12; bonus bMdef,8; bonus bAgi,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4920,'Essence_of_Evil_DEX1','Essence of Evil DEX1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDex,1; bonus bHit,2; bonus bLuk,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4921,'Essence_of_Evil_DEX2','Essence of Evil DEX2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDex,2; bonus bHit,4; bonus bLuk,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4922,'Essence_of_Evil_DEX3','Essence of Evil DEX3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDex,4; bonus bHit,8; bonus bLuk,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4923,'Essence_of_Evil_LUK1','Essence of Evil LUK1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,1; bonus bCritical,1; bonus bDex,-1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4924,'Essence_of_Evil_LUK2','Essence of Evil LUK2',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,2; bonus bCritical,2; bonus bDex,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4925,'Essence_of_Evil_LUK3','Essence of Evil LUK3',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bLuk,4; bonus bCritical,4; bonus bDex,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4926,'Critical_Lv1','Critical Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4927,'MaxHP+50','MaxHP+50',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHP,50;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4928,'MaxSP+10','MaxSP+10',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4929,'MSP+1%','MaxSP+1%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSPrate,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4930,'Increase_Recovery','Increase Recovery',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHPrecovRate,2; bonus bSPrecovRate,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4931,'Healing_10','Healing 10',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bHPRegenRate,10,10000;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4932,'SP_Recovery_1','SP Recovery 1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bSPGainValue,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4933,'Neutral_Properties_Lv1','Neutral Properties Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4934,'Neutral_Properties_Lv2','Neutral Properties Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4935,'Neutral_Properties_Lv3','Neutral Properties Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4936,'Large_Size_Attack_1','Large Size Attack 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddSize,Size_Large,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4937,'Medium_Size_Attack_1','Medium Size Attack 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddSize,Size_Medium,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4938,'Small_Size_Attack_1','Small Size Attack 1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddSize,Size_Small,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4939,'Critical_Lv2','Critical Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4940,'Cricital_Lv3','Critical Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4941,'Critical_Lv4','Critical Lv4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4942,'Shedding_Lv1','Shedding Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4943,'Shedding_Lv2','Shedding Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4944,'Shedding_Lv3','Shedding Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4945,'Saving_Lv1','Saving Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4946,'Saving_Lv2','Saving Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4947,'Saving_Lv3','Saving Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-6;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4948,'Delay_After_Skill_Lv1','Delay After Skill Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4949,'Delay_After_Skill_Lv2','Delay After Skill Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-4;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (4950,'Delay_After_Skill_Lv3','Delay After Skill Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4881,'Attack_Delay_4','Attack Delay 4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAspdRate,10; bonus bDelayrate,-10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4882,'Atk1p','ATK + 1%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4883,'Matk1p','MATK + 1%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4884,'Hit1_','HIT + 1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHit,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4885,'Conjure1','Spell 1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,5; bonus bVariableCastrate,-3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4886,'Conjure2','Spell 2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,10; bonus bVariableCastrate,-3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4887,'Conjure3','Spell 3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,15; bonus bVariableCastrate,-3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4888,'Conjure4','Spell 4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,20; bonus bVariableCastrate,-3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4889,'Conjure5','Spell 5',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatk,30; bonus bVariableCastrate,-5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4890,'Mdef1','MDEF+1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4891,'Mdef3','MDEF+3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4892,'Mdef5','MDEF+5',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4893,'Def15','DEF+15',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMdef,15;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4894,'Atk4p','ATK + 4%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4895,'Atk5p','ATK + 5%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4896,'Matk2p','MATK + 2%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4897,'Matk3p','MATK + 3%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4898,'Matk4p','MATK + 4%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4899,'Matk5p','MATK + 5%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4900,'MHP5','MHP+5%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4902,'Def18','DEF+18',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDef,18;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4903,'Def21','DEF+21',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDef,21;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4904,'Atk6p','ATK + 6%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4905,'Atk7p','ATK + 7%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bAtkRate,7;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4906,'Matk6p','MATK + 6',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4907,'Matk7p','MATK + 7%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMatkRate,7;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4908,'Force1','Darklord Essence Force1',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bStr,1; bonus bBaseAtk,3; bonus bInt,-1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4909,'Force2','Darklord Essence Force2',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bStr,2; bonus bBaseAtk,6; bonus bInt,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4910,'Force3','Darklord Essence Force3',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bStr,4; bonus bBaseAtk,12; bonus bInt,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4911,'Intellect1','Darklord Essence Intelligence1',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus bMatk,3; bonus bStr,-1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4912,'Intellect2','Darklord Essence Intelligence2',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bInt,2; bonus bMatk,6; bonus bStr,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4913,'Intellect3','Darklord Essence Intelligence3',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bInt,4; bonus bMatk,12; bonus bStr,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4914,'Swiftness1','Darklord Essence Speed1',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bAgi,1; bonus bFlee,2; bonus bVit,-1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4915,'Swiftness2','Darklord Essence Speed2',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bAgi,2; bonus bFlee,4; bonus bVit,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4916,'Swiftness3','Darklord Essence Speed3',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bAgi,4; bonus bFlee,8; bonus bVit,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4917,'Tough1','Darklord Essence Vitality1',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bVit,1; bonus bDef,3; bonus bMdef,2; bonus bAgi,-1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4918,'Tough2','Darklord Essence Vitality2',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bVit,2; bonus bDef,6; bonus bMdef,4; bonus bAgi,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4919,'Tough3','Darklord Essence Vitality3',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bVit,4; bonus bDef,12; bonus bMdef,8; bonus bAgi,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4920,'Artful1','Darklord Essence Concentration1',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bDex,1; bonus bHit,2; bonus bLuk,-1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4921,'Artful2','Darklord Essence Concentration2',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bDex,2; bonus bHit,4; bonus bLuk,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4922,'Artful3','Darklord Essence Concentration3',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bDex,4; bonus bHit,8; bonus bLuk,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4923,'Fortune1','Darklord Essence Luck1',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bLuk,1; bonus bCritical,1; bonus bDex,-1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4924,'Fortune2','Darklord Essence Luck2',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bLuk,2; bonus bCritical,2; bonus bDex,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4925,'Fortune3','Darklord Essence Luck3',6,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1021,NULL,NULL,NULL,NULL,'bonus bLuk,4; bonus bCritical,4; bonus bDex,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4926,'Critical_Lv1','Cri 1Lv',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4927,'HP50','MaxHP50',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxHP,50;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4928,'SP10','MaxSP+10',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSP,10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4929,'MSP1','MSP+1%',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bMaxSPrate,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4930,'HEAL2','Recovery UP',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bHPrecovRate,2; bonus bSPrecovRate,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4931,'HEALHP1','Heal 10',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bHPRegenRate,10,10000;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4932,'HEALSP1','SP recovery1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bSPGainValue,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4933,'Tolerance_Not1','Neutral Resistance Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4934,'Tolerance_Not2','Neutral Resistance Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4935,'Tolerance_Not3','Neutral Resistance Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4936,'ATK_BIG1','Attack big1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddSize,Size_Large,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4937,'ATK_MEDIUM1','Attack mid1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddSize,Size_Medium,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4938,'ATK_SMALL1','Attack small1',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus2 bAddSize,Size_Small,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4939,'Critical2','CRI Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4940,'Cricital3','CRI Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4941,'Critical4','CRI Lv4',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bCritical,6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4942,'Dodge1','Parrying Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4943,'Dodge2','Parrying Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4944,'Dodge3','Parrying Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bFlee2,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4945,'Thrift1','Economy Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4946,'Thrift2','Economy Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4947,'Thrift3','Economy Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bUseSPrate,-6;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4948,'Skill_Delay1','After Skill Delay Lv1',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4949,'Skill_Delay2','After Skill Delay Lv2',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-4;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (4950,'Skill_Delay3','After Skill Delay Lv3',6,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'bonus bDelayrate,-6;',NULL,NULL); #=================================================================== # More Headgears #=================================================================== @@ -11083,222 +11082,222 @@ REPLACE INTO `item_db_re` VALUES (23196,'Shining_Blue_Lucky_Egg','Shining Blue L #=================================================================== # Shadow Equipments #=================================================================== -REPLACE INTO `item_db_re` VALUES (24000,'T_STR1_Armor_Shadow','T STR1 Armor Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',NULL,NULL,'bonus bStr,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24001,'T_DEX1_Weapon_Shadow','T DEX1 Weapon Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',NULL,NULL,'bonus bDex,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24002,'T_LUK1_Shield_Shadow','T LUK1 Shield Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',NULL,NULL,'bonus bLuk,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24003,'T_AGI1_Shoes_Shadow','T AGI1 Shoes Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',NULL,NULL,'bonus bAgi,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24004,'T_VIT1_Earrings_Shadow(R)','T VIT1 Earrings Shadow(R)',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',NULL,NULL,'bonus bVit,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24005,'T_INT1_Pendant_Shadow(L)','T INT1 Pendant Shadow(L)',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',NULL,NULL,'bonus bInt,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24006,'T_STR2_Armor_Shadow','T STR2 Armor Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'30',NULL,NULL,'bonus bStr,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24007,'T_DEX2_Weapon_Shadow','T DEX2 Weapon Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'30',NULL,NULL,'bonus bDex,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24008,'T_LUK2_Shield_Shadow','T LUK2 Shield Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'60',NULL,NULL,'bonus bLuk,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24009,'T_AGI2_Shoes_Shadow','T AGI2 Shoes Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'90',NULL,NULL,'bonus bAgi,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24010,'T_VIT2_Earrings_Shadow(R)','T VIT2 Earrings Shadow(R)',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'120',NULL,NULL,'bonus bVit,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24011,'T_INT2_Pendant_Shadow(L)','T INT2 Pendant Shadow(L)',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'150',NULL,NULL,'bonus bInt,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24012,'Promotional_Weapon_Shadow','Promotional Weapon Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',NULL,NULL,'bonus bDex,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24013,'Promotional_Armor_Shadow','Promotional Armor Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',NULL,NULL,'bonus bLuk,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24014,'Promotional_Shoes_Shadow','Promotional Shoes Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',NULL,NULL,'bonus bAgi,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24015,'Promotional_Shield_Shadow','Promotional Shield Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',NULL,NULL,'bonus bVit,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24016,'Promotional_Earrings_Shadow','Promotional Earrings Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',NULL,NULL,'bonus bInt,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24017,'Promotional_Pendant_Shadow','Promotional Pendant Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',NULL,NULL,'bonus bStr,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24018,'Shadow_Physical_Earring','Shadow Physical Earring',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bAspdRate,(getrefine()>=7)?2:1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24019,'Shadow_Physical_Weapon','Shadow Physical Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bBaseAtk,10; if(getrefine()>=7) { bonus bAtkRate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24020,'Shadow_Physical_Pendant','Shadow Physical Pendant',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bMaxHP,100; if(getrefine()>=7) { bonus bMaxHPrate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24021,'Shadow_Magical_Earring','Shadow Magical Earring',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bVariableCastrate,-(getrefine()>=7)?2:1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24022,'Shadow_Magical_Weapon','Shadow Magical Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bMatk,10; if(getrefine()>=7) { bonus bMatkRate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24023,'Shadow_Magical_Pendant','Shadow Magical Pendant',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bMaxSP,50; if(getrefine()>=7) { bonus bMaxSPrate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24024,'Shadow_Breeze_Armor','Shadow Breeze Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',NULL,NULL,'bonus bFlee,5+(getrefine()>=7 ? 10 : 0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24025,'Shadow_Champion_Shoes','Shadow Champion Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus bMaxHP,20; bonus bMaxSP,20; if(getrefine()>=7) { bonus bMaxHP,1; bonus bMaxSP,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24026,'Shadow_Athena_Shield','Shadow Athena Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus bDef,(getrefine()>=7)?20:10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24027,'Immune_Shadow_Armor','Immune Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubEle,0,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24028,'Hard_Shadow_Armor','Hard Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bMaxHP,50; if(getrefine()>=7) { bonus bMaxHPrate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24029,'Ancient_Shadow_Armor','Ancient Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bHit,(getrefine()>=7)?20:10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24030,'Critital_Shadow_Armor','Critital Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bCritical,(getrefine()>=7)?10:5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24031,'King_Bird_Shadow_Weapon','King Bird Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bBaseAtk,10; if(getrefine()>=7) { bonus bLongAtkRate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24032,'Critical_Hit_Shadow_Weapon','Critical Hit Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bBaseAtk,10; if(getrefine()>=7) { bonus bCritAtkRate,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24034,'Lucky_Shadow_Weapon','Lucky Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bLuk,1; if(getrefine()>=7) { bonus bLuk,1; } if(getrefine()>=9) { bonus bLuk,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24033,'Healing_Shadow_Weapon','Healing Shadow Weapon',12,10,NULL,0,'0:10',NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'if (getrefine()>=7) bonus bHealPower2,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24035,'Power_Shadow_Earring','Power Shadow Earring',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bStr,1; .@r = getrefine(); if(.@r>=7) { bonus bStr,1; } if(.@r>=9) { bonus bStr,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24036,'Ect_Shadow_Pendant','Ect Shadow Pendant',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bInt,1; .@r = getrefine(); if(.@r>=7) { bonus bInt,1; } if(.@r>=9) { bonus bInt,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24037,'Dexter_travelers_Shadow_Armor','Dexter travelers Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bDex,1; .@r = getrefine(); if(.@r>=7) { bonus bDex,1; } if(.@r>=9) { bonus bDex,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24038,'Vital_Shadow_Shoes','Vital Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus bVit,1; .@r = getrefine(); if(.@r>=7) { bonus bVit,1; } if(.@r>=9) { bonus bVit,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24039,'Athletic_Shadow_Shield','Athletic Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus bAgi,1; .@r = getrefine(); if(.@r>=7) { bonus bAgi,1; } if(.@r>=9) { bonus bAgi,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24040,'Lucky_Shadow_Armor','Lucky Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bLuk,1; bonus bCritical,(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24041,'Power_Shadow_Pendant','Power Shadow Pendant',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bStr,1; bonus bBaseAtk,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24042,'Ect_Shadow_Earring','Ect Shadow Earring',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bInt,1; bonus bMatk,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24043,'Dexter_Travelers_Shadow_Weapon','Dexter Travelers Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bDex,1; bonus bHit,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24044,'Vital_Shadow_Shield','Vital Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus bVit,1; bonus bDef,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24045,'Athletic_Shadow_Shoes','Athletic Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus bAgi,1; bonus bFlee,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24046,'Resist_Spell_Power_Shadow_Pendant','Resist Spell Power Shadow Pendant',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bMdef,(getrefine()>=7)?6:3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24047,'Rapid_Shadow_Pendant','Rapid Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus bAspdRate,1+((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24048,'Casters_Shadow_Pendant','Casters Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus bVariableCastrate,1+((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24049,'Hard_Shadow_Earring','Hard Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMaxHP,100; .@r = getrefine(); bonus bMaxHPRate,((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24050,'Wise_Shadow_Earring','Wise Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMaxSP,50; .@r = getrefine(); bonus bMaxSPRate,((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24051,'Athena_Shadow_Earring','Athena Shadow Earring',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bDef,(getrefine()>=7)?20:10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24052,'Cranial_Shadow_Shield','Cranial Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,7,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,7,1; } if(.@r>=9) { bonus2 bSubRace,7,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24053,'Safeguard_Shadow_Shield','Safeguard Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,10,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,10,1; } if(.@r>=9) { bonus2 bSubRace,10,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24054,'Brutal_Shadow_Shield','Brutal Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,2,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,2,1; } if(.@r>=9) { bonus2 bSubRace,2,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24055,'Gargantua_Shadow_Shield','Gargantua Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,4,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,4,1; } if(.@r>=9) { bonus2 bSubRace,4,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24056,'Homer\'s_Shadow_Shield','Homer\'s Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,5,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,5,1; } if(.@r>=9) { bonus2 bSubRace,5,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24057,'Dragoon_Shadow_Shield','Dragoon Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,9,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,9,1; } if(.@r>=9) { bonus2 bSubRace,9,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24058,'Satanic_Shadow_Shield','Satanic Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,8,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,8,1; } if(.@r>=9) { bonus2 bSubRace,8,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24059,'Fire-Proof_Shadow_Shield','Fire-Proof Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,0,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,0,1; } if(.@r>=9) { bonus2 bSubRace,0,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24060,'Requiem_Shadow_Shield','Requiem Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,1,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,1,1; } if(.@r>=9) { bonus2 bSubRace,1,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24061,'Cadi_Shadow_Shield','Cadi Shadow Shield',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,3,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,3,1; } if(.@r>=9) { bonus2 bSubRace,3,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24062,'Bloody_Shadow_Shoes','Bloody Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,7,1; bonus2 bMagicAddRace,7,1; } if(.@r>=9) { bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24063,'Liberation_Shadow_Shoes','Liberation Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,10,1; bonus2 bMagicAddRace,10,1; } if(.@r>=9) { bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24064,'Chemical_Shadow_Shoes','Chemical Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,3,1; bonus2 bMagicAddRace,3,1; } if(.@r>=9) { bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24065,'Glamorous_Shadow_Shoes','Glamorous Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,2,1; bonus2 bMagicAddRace,2,1; } if(.@r>=9) { bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24066,'Sekti_Side_Shadow_Shoes','Sekti Side Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,4,1; bonus2 bMagicAddRace,4,1; } if(.@r>=9) { bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24067,'Fisher_Shadow_Shoes','Fisher Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,5,1; bonus2 bMagicAddRace,5,1; } if(.@r>=9) { bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24068,'Seraphim_Shadow_Shoes','Seraphim Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,8,1; bonus2 bMagicAddRace,8,1; } if(.@r>=9) { bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24069,'Beholder_Shadow_Shoes','Beholder Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,0,1; bonus2 bMagicAddRace,0,1; } if(.@r>=9) { bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24070,'Divine_Shadow_Shoes','Divine Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,1,1; bonus2 bMagicAddRace,1,1; } if(.@r>=9) { bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24071,'Dragoons_Shadow_Shoes','Dragoons Shadow Shoes',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,9,1; bonus2 bMagicAddRace,9,1; } if(.@r>=9) { bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24072,'Large_Shadow_Armor','Large Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,2,1; } if(.@r>=9) { bonus2 bSubSize,2,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24073,'Medium_Shadow_Armor','Medium Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,1,1; } if(.@r>=9) { bonus2 bSubSize,1,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24074,'Small_Shadow_Armor','Small Shadow Armor',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,0,1; } if(.@r>=9) { bonus2 bSubSize,0,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24075,'Large_Shadow_Weapon','Large Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus2 bAddSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,2,1; } if(.@r>=9) { bonus2 bAddSize,2,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24076,'Medium_Shadow_Weapon','Medium Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus2 bAddSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,1,1; } if(.@r>=9) { bonus2 bAddSize,1,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24077,'Small_Shadow_Weapon','Small Shadow Weapon',12,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus2 bAddSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,0,1; } if(.@r>=9) { bonus2 bAddSize,0,2; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24078,'Spiritual_Shadow_Weapon','Spiritual Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bUseSPrate,-5; if(getrefine()>=7){bonus bSPrecovRate,5;}',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24079,'Spiritual_Shadow_Earring','Spiritual Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMaxSP,50;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24080,'Spiritual_Shadow_Pendant','Spiritual Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bMaxSPrate,(getrefine()>=7?2:1);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24081,'Mali_Shas_Shadow_Armor','Mali Shas Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bMaxHP,100; if(getrefine()>=7){bonus bMaxHPrate,1;}',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24082,'Mali_Shas_Shadow_Shoes','Mali Shas Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bMaxHPrate,(getrefine()>=7?2:1);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24083,'Mali_Shas_Shadow_Shield','Mali Shas Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bHPrecovRate,(getrefine()>=7?10:5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24084,'Gemstone_Shadow_Armor','Gemstone Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bCritical,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24085,'Gemstone_Shadow_Shoes','Gemstone Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bFlee,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24086,'Gemstone_Shadow_Shield','Gemstone Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bDef,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24087,'Gemstone_Shadow_Weapon','Gemstone Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bHit,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24088,'Gemstone_Shadow_Earring','Gemstone Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMatk,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24089,'Gemstone_Shadow_Pendant','Gemstone Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bBaseAtk,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24090,'Stability_Shadow_Shield','Stability Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bDef,3; .@r = getrefine(); bonus2 bResEff,Eff_Stun,.@r/2; bonus2 bResEff,Eff_Freeze,.@r/2; bonus2 bResEff,Eff_Curse,.@r/2; bonus2 bResEff,Eff_Bleeding,.@r/2; bonus2 bResEff,Eff_Stone,.@r; bonus2 bResEff,Eff_Sleep,.@r; bonus2 bResEff,Eff_Silence,.@r; bonus2 bResEff,Eff_Blind,.@r;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24091,'Harrods_Plaster_Shadow_Armor','Harrods Plaster Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24092,'Harrods_Plaster_Shadow_Shoes','Harrods Plaster Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24093,'Insomnia_Shadow_Armor','Insomnia Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24094,'Insomnia_Shadow_Shoes','Insomnia Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24095,'Peerless_Shadow_Armor','Peerless Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24096,'Peerless_Shadow_Shoes','Peerless Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24097,'Andre_Shadow_Armor','Andre Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24098,'Andre_Shadow_Shoes','Andre Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24099,'Freezing_Frozen_Shadow_Weapon','Freezing Frozen Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24100,'Freezing_Frozen_Shadow_Earring','Freezing Frozen Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24101,'Freezing_Frozen_Shadow_Pendant','Freezing Frozen Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24102,'Vitality_Shadow_Earring','Vitality Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24103,'Vitality_Shadow_Pendant','Vitality Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24104,'Neutral_Shadow_Weapon','Neutral Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine()/2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24105,'Neutral_Shadow_Earring','Neutral Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24106,'Neutral_Shadow_Pendant','Neutral Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24107,'Frozen_Curse_Shadow_Earring','Frozen Curse Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24108,'Frozen_Curse_Shadow_Pendant','Frozen Curse Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24109,'Caster_Shadow_Earrings','Caster Shadow Earrings',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bVariableCastrate,-1-((getrefine()>=7)?1:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24110,'Caster_Shadow_Weapon','Caster Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'.@r = getrefine(); bonus bVariableCastrate,-1-((.@r>=7)?1:0)-((.@r>=9)?2:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24111,'Spell_Flow_Shadow_Shoes','Spell Flow Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bUseSPrate,1; if(getrefine()>=7) bonus bSPrecovRate,5;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24112,'Spell_Flow_Shadow_Armor','Spell Flow Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bUseSPrate,1+((getrefine()>=7)?1:0)+((getrefine()>=9)?1:0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24113,'Spell_Flow_Shadow_Shield','Spell Flow Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bUseSPrate,1; if(getrefine()>=7) bonus bMaxSPrate,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24114,'Grid_Shadow_Armor','Grid Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",100-(getrefine()*10);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24115,'Grid_Shadow_Shoes','Grid Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24116,'Grid_Shadow_Shield','Grid Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24117,'Grid_Shadow_Weapon','Grid Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24118,'Grid_Shadow_Earring','Grid Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24119,'Grid_Shadow_Pendant','Grid Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24120,'Heal_Shadow_Armor','Heal Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24121,'Heal_Shadow_Shoes','Heal Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24122,'Heal_Shadow_Shield','Heal Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24123,'Heal_Shadow_Weapon','Heal Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24124,'Heal_Shadow_Earring','Heal Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24125,'Heal_Shadow_Pendant','Heal Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24126,'Hiding_Shadow_Armor','Hiding Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); -REPLACE INTO `item_db_re` VALUES (24127,'Hiding_Shadow_Shoes','Hiding Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); -REPLACE INTO `item_db_re` VALUES (24128,'Hiding_Shadow_Shield','Hiding Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); -REPLACE INTO `item_db_re` VALUES (24129,'Hiding_Shadow_Weapon','Hiding Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); -REPLACE INTO `item_db_re` VALUES (24130,'Hiding_Shadow_Earring','Hiding Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); -REPLACE INTO `item_db_re` VALUES (24131,'Hiding_Shadow_Pendant','Hiding Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); -REPLACE INTO `item_db_re` VALUES (24132,'Cloaking_Shadow_Armor','Cloaking Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); -REPLACE INTO `item_db_re` VALUES (24133,'Cloaking_Shadow_Shoes','Cloaking Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); -REPLACE INTO `item_db_re` VALUES (24134,'Cloaking_Shadow_Shield','Cloaking Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); -REPLACE INTO `item_db_re` VALUES (24135,'Cloaking_Shadow_Weapon','Cloaking Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); -REPLACE INTO `item_db_re` VALUES (24136,'Cloaking_Shadow_Earring','Cloaking Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); -REPLACE INTO `item_db_re` VALUES (24137,'Cloaking_Shadow_Pendant','Cloaking Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); -REPLACE INTO `item_db_re` VALUES (24138,'Teleport_Shadow_Armor','Teleport Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24139,'Teleport_Shadow_Shoes','Teleport Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24140,'Teleport_Shadow_Shield','Teleport Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24141,'Teleport_Shadow_Weapon','Teleport Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24142,'Teleport_Shadow_Earring','Teleport Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24143,'Teleport_Shadow_Pendant','Teleport Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24144,'Steal_Shadow_Armor','Steal Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24145,'Steal_Shadow_Shoes','Steal Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24146,'Steal_Shadow_Shield','Steal Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24147,'Steal_Shadow_Weapon','Steal Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24148,'Steal_Shadow_Earring','Steal Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24149,'Steal_Shadow_Pendant','Steal Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24150,'Infinity_Shadow_Earring','Infinity Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24151,'Infinity_Shadow_Pendant','Infinity Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24152,'Solid_Shadow_Weapon','Solid Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bBaseAtk,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24153,'Solid_Shadow_Earring','Solid Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bHit,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24154,'Solid_Shadow_Armor','Solid Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24155,'Solid_Shadow_Pendant','Solid Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bMdef,(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24156,'Demi-Human_Shadow_Weapon','Demi-Human Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24157,'Exorcist_Shadow_Weapon','Exorcist Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Demon,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24158,'Hunting_Shadow_Weapon','Hunting Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Brute,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24159,'Insect_Shadow_Weapon','Insect Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Insect,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24160,'Fishing_Shadow_Weapon','Fishing Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Fish,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24161,'Dragon_Killer_Shadow_Weapon','Dragon Killer Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Dragon,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24162,'Angelus_Shadow_Weapon','Angelus Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Angel,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24163,'Formless_Shadow_Weapon','Formless Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Formless,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24164,'Holy_Water_Shadow_Weapon','Holy Water Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Undead,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24165,'Plant_Shadow_Weapon','Plant Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Plant,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24166,'Penetration_Shadow_Earring','Penetration Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24167,'Penetration_Shadow_Pendant','Penetration Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24168,'Tempest_Shadow_Earring','Tempest Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24169,'Tempest_Pendant_Shadow','Tempest Pendant Shadow',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24170,'Magic_Demi-Human_Shadow_Weapon','Magic Demi-Human Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24171,'Magic_Exorcist_Shadow_Weapon','Magic Exorcist Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Demon,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24172,'Magic_Hunting_Shadow_Weapon','Magic Hunting Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Brute,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24173,'Magic_Insect_Shadow_Weapon','Magic Insect Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Insect,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24174,'Magic_Fishing_Shadow_Weapon','Magic Fishing Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Fish,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24175,'Magic_Dragon_Killer_Shadow_Weapon','Magic Dragon Killer Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Dragon,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24176,'Magic_Angelus_Shadow_Weapon','Magic Angelus Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Angel,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24177,'Magic_Formless_Shadow_Weapon','Magic Formless Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Formless,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24178,'Magic_Holy_Water_Shadow_Weapon','Magic Holy Water Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Undead,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24179,'Magic_Caesars_Shadow_Weapon','Magic Caesars Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Plant,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24180,'Bearer\'s_Shadow_Armor','Bearer\'s Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bMdef,1+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24181,'Bearer\'s_Shadow_Shoes','Bearer\'s Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bMaxSP,50+(5*(getrefine()/2));',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24182,'Bearer\'s_Shadow_Shield','Bearer\'s Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bDef,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24183,'Bearer\'s_Shadow_Weapon','Bearer\'s Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bMaxHP,100+(10*(getrefine()/2));',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24184,'Bearer\'s_Shadow_Earring','Bearer\'s Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMatk,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24185,'Bearer\'s_Shadow_Pendant','Bearer\'s Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bBaseAtk,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24186,'Basis_Shadow_Armor','Basis Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Neutral,1+(.@r/2); bonus2 bMagicAddEle,Ele_Neutral,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24187,'Hallowed_Shadow_Armor','Hallowed Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Dark,1+(.@r/2); bonus2 bMagicAddEle,Ele_Dark,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24188,'Underneith_Shadow_Armor','Underneith Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Water,1+(.@r/2); bonus2 bMagicAddEle,Ele_Water,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24189,'Underneath_Shadow_Armor','Underneath Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Earth,1+(.@r/2); bonus2 bMagicAddEle,Ele_Earth,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24190,'Flame_Shadow_Armor','Flame Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Fire,1+(.@r/2); bonus2 bMagicAddEle,Ele_Fire,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24191,'Windy_Shadow_Armor','Windy Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Wind,1+(.@r/2); bonus2 bMagicAddEle,Ele_Wind,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24192,'Envenom_Shadow_Armor','Envenom Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Poison,1+(.@r/2); bonus2 bMagicAddEle,Ele_Poison,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24193,'Damned_Shadow_Armor','Damned Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Holy,1+(.@r/2); bonus2 bMagicAddEle,Ele_Holy,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24194,'Exorcism_Shadow_Armor','Exorcism Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Ghost,1+(.@r/2); bonus2 bMagicAddEle,Ele_Ghost,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24195,'Divine_Shadow_Armor','Divine Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Undead,1+(.@r/2); bonus2 bMagicAddEle,Ele_Undead,1+(.@r/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24196,'Hasty_Shadow_Shoes','Hasty Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bFlee,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24197,'Hasty_Shadow_Armor','Hasty Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bFlee,5+(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24198,'Basis_Shadow_Shield','Basis Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Neutral,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24199,'Hallowed_Shadow_Shield','Hallowed Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Dark,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24200,'Saharic_Shadow_Shield','Saharic Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Water,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24201,'Underneath_Shadow_Shield','Underneath Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Earth,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24202,'Flammable_Shadow_Shield','Flammable Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Fire,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24203,'Windy_Shadow_Shield','Windy Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Wind,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24204,'Envenom_Shadow_Shield','Envenom Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Poison,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24205,'Damned_Shadow_Shield','Damned Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Holy,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24206,'Exorcism_Shadow_Shield','Exorcism Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Ghost,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24207,'Divine_Shadow_Shield','Divine Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Undead,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24208,'Expert_Shadow_Shoes','Expert Shadow Shoes',12,20,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'150:175',1,NULL,'bonus2 bExpAddRace,RC_All,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24209,'Expert_Shield_Shadow','Expert Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'150:175',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/4);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24210,'Beginner_Shadow_Shoes','Beginner Shadow Shoes',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1:49',1,NULL,'bonus2 bExpAddRace,RC_All,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24211,'Beginner_Shadow_Shield','Beginner Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1:49',1,NULL,'bonus2 bExpAddRace,RC_All,getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24212,'Rookie_Shadow_Shoes','Rookie Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'50:99',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24213,'Rookie_Shadow_Shield','Rookie Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'50:99',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/2);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24214,'Advanced_Shadow_Shoes','Advanced Shadow Shoes',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'100:149',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24215,'Advanced_Shadow_Shield','Advanced Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'100:149',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24000,'T1_Shadow_Armor','Shadow Armor (Tier 1)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',NULL,NULL,'bonus bStr,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24001,'T1_Shadow_Weapon','Shadow Gauntlets (Tier 1)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',NULL,NULL,'bonus bDex,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24002,'T1_Shadow_Shield','Shadow Shield (Tier 1)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',NULL,NULL,'bonus bLuk,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24003,'T1_Shadow_Shoes','Shadow Shoes (Tier 1)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',NULL,NULL,'bonus bAgi,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24004,'T1_Shadow_R_Accessory','Shadow Ring (Tier 1)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',NULL,NULL,'bonus bVit,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24005,'T1_Shadow_L_Accessory','Shadow Pendant (Tier 1)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',NULL,NULL,'bonus bInt,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24006,'T2_Shadow_Armor','Shadow Armor (Tier 2)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'30',NULL,NULL,'bonus bStr,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24007,'T2_Shadow_Weapon','Shadow Gauntlets (Tier 2)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'30',NULL,NULL,'bonus bDex,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24008,'T2_Shadow_Shield','Shadow Shield (Tier 2)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'60',NULL,NULL,'bonus bLuk,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24009,'T2_Shadow_Shoes','Shadow Shoes (Tier 2)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'90',NULL,NULL,'bonus bAgi,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24010,'T2_Shadow_R_Accessory','Shadow Ring (Tier 2)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'120',NULL,NULL,'bonus bVit,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24011,'T2_Shadow_L_Accessory','Shadow Pendant (Tier 2)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'150',NULL,NULL,'bonus bInt,2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24012,'S_Promotion_Weapon','Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',NULL,NULL,'bonus bDex,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24013,'S_Promotion_Armor','Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',NULL,NULL,'bonus bLuk,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24014,'S_Promotion_Shoes','Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',NULL,NULL,'bonus bAgi,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24015,'S_Promotion_Shield','Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',NULL,NULL,'bonus bVit,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24016,'S_Promotion_Earring','Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',NULL,NULL,'bonus bInt,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24017,'S_Promotion_Pendant','Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',NULL,NULL,'bonus bStr,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24018,'S_Physical_Earring','Physical Earring (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bAspdRate,(getrefine()>=7)?2:1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24019,'S_Physical_Weapon','Physical Weapon (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bBaseAtk,10; if(getrefine()>=7) { bonus bAtkRate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24020,'S_Physical_Pendant','Physical Pendant (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bMaxHP,100; if(getrefine()>=7) { bonus bMaxHPrate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24021,'S_Magical_Earring','Magical Earring (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bVariableCastrate,-(getrefine()>=7)?2:1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24022,'S_Magical_Weapon','Magical Weapon (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bMatk,10; if(getrefine()>=7) { bonus bMatkRate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24023,'S_Magical_Pendant','Magical Pencil (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bMaxSP,50; if(getrefine()>=7) { bonus bMaxSPrate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24024,'S_Breezy_Armor','Breeze Armor (Shadow)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',NULL,NULL,'bonus bFlee,5+(getrefine()>=7 ? 10 : 0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24025,'S_Champion_Shoes','Champion Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus bMaxHP,20; bonus bMaxSP,20; if(getrefine()>=7) { bonus bMaxHP,1; bonus bMaxSP,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24026,'S_Athena_Shield','Athena Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus bDef,(getrefine()>=7)?20:10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24027,'S_Immune_Armor','Immune Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubEle,0,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24028,'S_Hard_Armor','Hard Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bMaxHP,50; if(getrefine()>=7) { bonus bMaxHPrate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24029,'S_Ancient_Armor','Ancient Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bHit,(getrefine()>=7)?20:10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24030,'S_Critical_Armor','Critital Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bCritical,(getrefine()>=7)?10:5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24031,'S_Kingbird_Weapon','Kingbird\'s Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bBaseAtk,10; if(getrefine()>=7) { bonus bLongAtkRate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24032,'S_Cri_Hit_Weapon','Critical Hit Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bBaseAtk,10; if(getrefine()>=7) { bonus bCritAtkRate,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24033,'S_Healing_Weapon','Healing Shadow Weapon',12,0,NULL,0,'0:10',NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'if (getrefine()>=7) bonus bHealPower2,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24034,'S_Lucky_Weapon','Lucky Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bLuk,1; if(getrefine()>=7) { bonus bLuk,1; } if(getrefine()>=9) { bonus bLuk,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24035,'S_Power_Earring','Power Shadow Earring',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bStr,1; .@r = getrefine(); if(.@r>=7) { bonus bStr,1; } if(.@r>=9) { bonus bStr,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24036,'S_Int_Pendant','Intelligent Shadow Pendant',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bInt,1; .@r = getrefine(); if(.@r>=7) { bonus bInt,1; } if(.@r>=9) { bonus bInt,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24037,'S_Dexterous_Armor','Dexterous Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bDex,1; .@r = getrefine(); if(.@r>=7) { bonus bDex,1; } if(.@r>=9) { bonus bDex,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24038,'S_Vital_Shoes','Vital Shadow Shoes',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus bVit,1; .@r = getrefine(); if(.@r>=7) { bonus bVit,1; } if(.@r>=9) { bonus bVit,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24039,'S_Athletic_Shield','Athletic Shadow Shield',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus bAgi,1; .@r = getrefine(); if(.@r>=7) { bonus bAgi,1; } if(.@r>=9) { bonus bAgi,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24040,'S_Lucky_Armor','Lucky Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus bLuk,1; bonus bCritical,(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24041,'S_Power_Pendant','Power Shadow Pendant',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bStr,1; bonus bBaseAtk,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24042,'S_Int_Earring','Intelligent Shadow Earring',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bInt,1; bonus bMatk,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24043,'S_Dexterous_Weapon','Dexterous Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bDex,1; bonus bHit,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24044,'S_Vital_Shield','Vital Shadow Shield',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus bVit,1; bonus bDef,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24045,'S_Athletic_Shoes','Athletic Shadow Shoes',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus bAgi,1; bonus bFlee,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24046,'S_Resist_Spell_Pendant','Resist Spell Power Pendant (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,0,'bonus bMdef,(getrefine()>=7)?6:3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24047,'S_Rapid_Pendant','Rapid Pendant (Shadow)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus bAspdRate,1+((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24048,'S_Caster_Pendant','Caster Pendant (Shadow)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus bVariableCastrate,1+((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24049,'S_Hard_Earring','Hard Earring (Shadow)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMaxHP,100; .@r = getrefine(); bonus bMaxHPRate,((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24050,'S_Wise_Earring','Wise Earring (Shadow)',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMaxSP,50; .@r = getrefine(); bonus bMaxSPRate,((.@r>=9)?2:(.@r>=7)?1:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24051,'S_Athena_Earring','Athena Earring (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,0,'bonus bDef,(getrefine()>=7)?20:10;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24052,'S_Cranial_Shield','Cranial Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,7,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,7,1; } if(.@r>=9) { bonus2 bSubRace,7,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24053,'S_Safeguard_Shield','Safeguard Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,10,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,10,1; } if(.@r>=9) { bonus2 bSubRace,10,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24054,'S_Brutal_Shield','Brutal Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,2,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,2,1; } if(.@r>=9) { bonus2 bSubRace,2,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24055,'S_Gargantua_Shield','Gargantua Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,4,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,4,1; } if(.@r>=9) { bonus2 bSubRace,4,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24056,'S_Homers_Shield','Homers Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,5,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,5,1; } if(.@r>=9) { bonus2 bSubRace,5,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24057,'S_Dragoon_Shield','Dragoon Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,9,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,9,1; } if(.@r>=9) { bonus2 bSubRace,9,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24058,'S_Satanic_Shield','Satanic Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,8,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,8,1; } if(.@r>=9) { bonus2 bSubRace,8,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24059,'S_Flameguard_Shield','Flameguard Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,0,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,0,1; } if(.@r>=9) { bonus2 bSubRace,0,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24060,'S_Requiem_Shield','Requiem Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,1,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,1,1; } if(.@r>=9) { bonus2 bSubRace,1,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24061,'S_Cadi_Shield','Cadi Shield (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,0,'bonus2 bSubRace,3,1; .@r = getrefine(); if(.@r>=7) { bonus2 bSubRace,3,1; } if(.@r>=9) { bonus2 bSubRace,3,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24062,'S_Bloody_Shoes','Bloody Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,7,1; bonus2 bMagicAddRace,7,1; } if(.@r>=9) { bonus2 bAddRace,7,2; bonus2 bMagicAddRace,7,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24063,'S_Liberation_Shoes','Liberation Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,10,1; bonus2 bMagicAddRace,10,1; } if(.@r>=9) { bonus2 bAddRace,10,2; bonus2 bMagicAddRace,10,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24064,'S_Chemical_Shoes','Chemical Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,3,1; bonus2 bMagicAddRace,3,1; } if(.@r>=9) { bonus2 bAddRace,3,2; bonus2 bMagicAddRace,3,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24065,'S_Clamorous_Shoes','Clamorous Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,2,1; bonus2 bMagicAddRace,2,1; } if(.@r>=9) { bonus2 bAddRace,2,2; bonus2 bMagicAddRace,2,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24066,'S_Insecticide_Shoes','Insecticide Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,4,1; bonus2 bMagicAddRace,4,1; } if(.@r>=9) { bonus2 bAddRace,4,2; bonus2 bMagicAddRace,4,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24067,'S_Fisher_Shoes','Fisher Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,5,1; bonus2 bMagicAddRace,5,1; } if(.@r>=9) { bonus2 bAddRace,5,2; bonus2 bMagicAddRace,5,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24068,'S_Seraphim_Shoes','Seraphim Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,8,1; bonus2 bMagicAddRace,8,1; } if(.@r>=9) { bonus2 bAddRace,8,2; bonus2 bMagicAddRace,8,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24069,'S_Beholder_Shoes','Beholder Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,0,1; bonus2 bMagicAddRace,0,1; } if(.@r>=9) { bonus2 bAddRace,0,2; bonus2 bMagicAddRace,0,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24070,'S_Divine_Shoes','Divine Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,1,1; bonus2 bMagicAddRace,1,1; } if(.@r>=9) { bonus2 bAddRace,1,2; bonus2 bMagicAddRace,1,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24071,'S_Dragoon_Shoes','Dragoon Shoes (Shadow)',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,0,'bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddRace,9,1; bonus2 bMagicAddRace,9,1; } if(.@r>=9) { bonus2 bAddRace,9,2; bonus2 bMagicAddRace,9,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24072,'S_Big_Armor','Large Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,2,1; } if(.@r>=9) { bonus2 bSubSize,2,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24073,'S_Medium_Armor','Medium Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,1,1; } if(.@r>=9) { bonus2 bSubSize,1,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24074,'S_Small_Armor','Small Shadow Armor',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,0,'bonus2 bSubSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bSubSize,0,1; } if(.@r>=9) { bonus2 bSubSize,0,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24075,'S_Big_Weapon','Large Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus2 bAddSize,2,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,2,1; } if(.@r>=9) { bonus2 bAddSize,2,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24076,'S_Medium_Weapon','Medium Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus2 bAddSize,1,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,1,1; } if(.@r>=9) { bonus2 bAddSize,1,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24077,'S_Small_Weapon','Small Shadow Weapon',12,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus2 bAddSize,0,2; .@r = getrefine(); if(.@r>=7) { bonus2 bAddSize,0,1; } if(.@r>=9) { bonus2 bAddSize,0,2; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24078,'S_Spiritual_Weapon','Spiritual Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,131072,NULL,'1',1,0,'bonus bUseSPrate,-5; if(getrefine()>=7){bonus bSPrecovRate,5;}',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24079,'S_Spiritual_Earring','Spiritual Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMaxSP,50;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24080,'S_Spiritual_Pendent','Spiritual Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bMaxSPrate,(getrefine()>=7?2:1);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24081,'S_Malicious_Armor','Malicious Shas Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bMaxHP,100; if(getrefine()>=7){bonus bMaxHPrate,1;}',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24082,'S_Malicious_Shoes','Malicious Shas Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bMaxHPrate,(getrefine()>=7?2:1);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24083,'S_Malicious_Shield','Malicious Shas Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bHPrecovRate,(getrefine()>=7?10:5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24084,'S_Gemstone_Armor','Gemstone Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bCritical,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24085,'S_Gemstone_Shoes','Gemstone Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bFlee,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24086,'S_Gemstone_Shield','Gemstone Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bDef,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24087,'S_Gemstone_Weapon','Gemstone Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bHit,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24088,'S_Gemstone_Earring','Gemstone Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMatk,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24089,'S_Gemstone_Pendent','Gemstone Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bBaseAtk,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24090,'S_Stability_Shield','Stability Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bDef,3; .@r = getrefine(); bonus2 bResEff,Eff_Stun,.@r/2; bonus2 bResEff,Eff_Freeze,.@r/2; bonus2 bResEff,Eff_Curse,.@r/2; bonus2 bResEff,Eff_Bleeding,.@r/2; bonus2 bResEff,Eff_Stone,.@r; bonus2 bResEff,Eff_Sleep,.@r; bonus2 bResEff,Eff_Silence,.@r; bonus2 bResEff,Eff_Blind,.@r;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24091,'S_Plasterer\'s_Armor','Harrods Plaster Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24092,'S_Plasterer\'s_Shoes','Harrods Plaster Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stone,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24093,'S_Insomniac_Armor','Insomnia Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24094,'S_Insomniac_Shoes','Insomnia Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Sleep,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24095,'S_Peerless_Armor','Peerless Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24096,'S_Peerless_Shoes','Peerless Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Silence,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24097,'S_Adurate_Armor','Andre Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24098,'S_Adurate_Shoes','Andre Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Blind,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24099,'Unfreez_Weapon_S','Unfreezing Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24100,'Unfreeze_Earing_S','Unfreezing Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24101,'Unfreeze_Pendent_S','Unfreezing Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Freeze,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24102,'Vitality_Earing_S','Vitality Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24103,'Vitality_Pendant_S','Vitality Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Bleeding,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24104,'S_Neutral_Weapon','Neutral Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine()/2;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24105,'S_Neutral_Earring','Neutral Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24106,'S_Neutral_Pendent','Neutral Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Stun,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24107,'S_Curse_Lift_Earring','Frozen Curse Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24108,'S_Curse_Lift_Pendent','Frozen Curse Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bDef,1; bonus2 bResEff,Eff_Curse,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24109,'S_Caster_earring','Caster Shadow Earrings',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bVariableCastrate,-1-((getrefine()>=7)?1:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24110,'S_Caster_Weapon','Caster Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'.@r = getrefine(); bonus bVariableCastrate,-1-((.@r>=7)?1:0)-((.@r>=9)?2:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24111,'S_Spell_Flow_Shoes','Spellflow Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bUseSPrate,1; if(getrefine()>=7) bonus bSPrecovRate,5;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24112,'S_Spell_Flow_Armor','Spellflow Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bUseSPrate,1+((getrefine()>=7)?1:0)+((getrefine()>=9)?1:0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24113,'S_Spell_Flow_Shield','Spellflow Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bUseSPrate,1; if(getrefine()>=7) bonus bMaxSPrate,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24114,'S_Greed_Armor','Grid Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",100-(getrefine()*10);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24115,'S_Greed_Shoes','Grid Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24116,'S_Greed_Shield','Grid Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24117,'S_Greed_Weapon','Grid Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24118,'S_Greed_Earring','Grid Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24119,'S_Greed_Pendant','Grid Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "BS_GREED",1; bonus2 bSkillUseSP,"BS_GREED",-100+(getrefine()*10);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24120,'S_Heal_Armor','Heal Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24121,'S_Heal_Shoes','Heal Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24122,'S_Heal_Shield','Heal Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24123,'S_Heal_Weapon','Heal Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24124,'S_Heal_Earring','Heal Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24125,'S_Heal_Pendant','Heal Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "AL_HEAL",1; bonus2 bSkillUseSP,"AL_HEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24126,'S_Hiding_Armor','Hiding Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); +REPLACE INTO `item_db_re` VALUES (24127,'S_Hiding_Shoes','Hiding Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); +REPLACE INTO `item_db_re` VALUES (24128,'S_Hiding_Shield','Hiding Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); +REPLACE INTO `item_db_re` VALUES (24129,'S_Hiding_Weapon','Hiding Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); +REPLACE INTO `item_db_re` VALUES (24130,'S_Hiding_Earring','Hiding Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); +REPLACE INTO `item_db_re` VALUES (24131,'S_Hiding_Pendant','Hiding Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "TF_HIDING",1; bonus2 bSkillUseSP,"TF_HIDING",-50+(getrefine()*5);',NULL,'sc_end SC_HIDING;'); +REPLACE INTO `item_db_re` VALUES (24132,'S_Cloaking_Armor','Cloaking Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); +REPLACE INTO `item_db_re` VALUES (24133,'S_Cloaking_Shoes','Cloaking Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); +REPLACE INTO `item_db_re` VALUES (24134,'S_Cloaking_Shield','Cloaking Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); +REPLACE INTO `item_db_re` VALUES (24135,'S_Cloaking_Weapon','Cloaking Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); +REPLACE INTO `item_db_re` VALUES (24136,'S_Cloaking_Earring','Cloaking Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); +REPLACE INTO `item_db_re` VALUES (24137,'S_Cloaking_Pendant','Cloaking Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "AS_CLOAKING",1; bonus2 bSkillUseSP,"AS_CLOAKING",-50+(getrefine()*5);',NULL,'sc_end SC_CLOAKING;'); +REPLACE INTO `item_db_re` VALUES (24138,'S_Teleport_Armor','Teleport Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24139,'S_Teleport_Shoes','Teleport Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24140,'S_Teleport_Shield','Teleport Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24141,'S_Teleport_Weapon','Teleport Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24142,'S_Teleport_Earring','Teleport Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24143,'S_Teleport_Pendant','Teleport Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "AL_TELEPORT",1; bonus2 bSkillUseSP,"AL_TELEPORT",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24144,'S_Steal_Armor','Steal Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24145,'S_Steal_Shoes','Steal Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24146,'S_Steal_Shield','Steal Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24147,'S_Steal_Weapon','Steal Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24148,'S_Steal_Earring','Steal Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24149,'S_Steal_Pendant','Steal Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'skill "TF_STEAL",1; bonus2 bSkillUseSP,"TF_STEAL",-50+(getrefine()*5);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24150,'S_Infinity_Earring','Infinity Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24151,'S_Infinity_Pendant','Infinity Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubSize,Size_All,1+((.@r >= 9) ? 2 : (.@r >= 7) ? 1 : 0);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24152,'S_Solid_Weapon','Solid Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bBaseAtk,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24153,'S_Solid_Earring','Solid Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bHit,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24154,'S_Immortal_Armor','Solid Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bDef,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24155,'S_Immortal_Pendant','Solid Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bMdef,(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24156,'S_Executioner_Weapon','Demi-Human Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24157,'S_Exorcist_Weapon','Exorcist Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Demon,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24158,'S_Hunting_Weapon','Hunting Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Brute,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24159,'S_Insect_Net_Weapon','Insect Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Insect,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24160,'S_Fishing_Weapon','Fishing Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Fish,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24161,'S_Dragon_Killer_Weapon','Dragon Killer Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Dragon,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24162,'S_Corrupt_Weapon','Angelus Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Angel,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24163,'S_Vibration_Weapon','Formless Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Formless,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24164,'S_Holy_Water_Weapon','Holy Water Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Undead,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24165,'S_Scissors_Weapon','Plant Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreDefRaceRate,RC_Plant,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24166,'S_Penetration_Earring','Penetration Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24167,'S_Penetration_Pendent','Penetration Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bIgnoreDefRaceRate,RC_All,5+(.@r/2); bonus2 bIgnoreDefRaceRate,RC_Player,-5-(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24168,'S_Tempest_Earring','Tempest Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24169,'S_Tempest_Pendent','Tempest Pendant Shadow',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus2 bIgnoreMdefClassRate,Class_Normal,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24170,'S_M_Executioner_Weapon','Magic Demi-Human Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24171,'S_M_Exorcist_Weapon','Magic Exorcist Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Demon,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24172,'S_M_Hunting_Weapon','Magic Hunting Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Brute,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24173,'S_M_Insect_Net_Weapon','Magic Insect Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Insect,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24174,'S_M_Fishing_Weapon','Magic Fishing Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Fish,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24175,'S_M_Dragon_K_Weapon','Magic Dragon Killer Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Dragon,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24176,'S_M_Corrupt_Weapon','Magic Angelus Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Angel,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24177,'S_M_Vibration_Weapon','Magic Formless Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Formless,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24178,'S_M_Holy_Water_Weapon','Magic Holy Water Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Undead,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24179,'S_M_Scissors_Weapon','Magic Caesars Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus2 bIgnoreMdefRaceRate,RC_Plant,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24180,'S_Bearers_Armor','Bearer\'s Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bMdef,1+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24181,'S_Bearers_Shoes','Bearer\'s Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bMaxSP,50+(5*(getrefine()/2));',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24182,'S_Bearers_Shield','Bearer\'s Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bDef,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24183,'S_Bearers_Weapon','Bearer\'s Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'1',1,NULL,'bonus bMaxHP,100+(10*(getrefine()/2));',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24184,'S_Bearers_Earring','Bearer\'s Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'bonus bMatk,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24185,'S_Bearers_Pendent','Bearer\'s Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'bonus bBaseAtk,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24186,'S_Basis_Armor','Basis Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Neutral,1+(.@r/2); bonus2 bMagicAddEle,Ele_Neutral,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24187,'S_Hallowed_Armor','Hallowed Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Dark,1+(.@r/2); bonus2 bMagicAddEle,Ele_Dark,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24188,'S_Saharic_Armor','Underneith Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Water,1+(.@r/2); bonus2 bMagicAddEle,Ele_Water,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24189,'S_Underneath_Armor','Underneath Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Earth,1+(.@r/2); bonus2 bMagicAddEle,Ele_Earth,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24190,'S_Flam_Armor','Flame Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Fire,1+(.@r/2); bonus2 bMagicAddEle,Ele_Fire,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24191,'S_Windy_Armor','Windy Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Wind,1+(.@r/2); bonus2 bMagicAddEle,Ele_Wind,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24192,'S_Envenom_Armor','Envenom Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Poison,1+(.@r/2); bonus2 bMagicAddEle,Ele_Poison,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24193,'S_Damned_Armor','Damned Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Holy,1+(.@r/2); bonus2 bMagicAddEle,Ele_Holy,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24194,'S_Geist_Armor','Exorcism Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Ghost,1+(.@r/2); bonus2 bMagicAddEle,Ele_Ghost,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24195,'S_Divine_Armor','Divine Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bAddEle,Ele_Undead,1+(.@r/2); bonus2 bMagicAddEle,Ele_Undead,1+(.@r/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24196,'S_Hasty_Shoes','Hasty Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bFlee,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24197,'S_Hasty_Armor','Hasty Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'bonus bFlee,5+(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24198,'S_Basis_Shield','Basis Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Neutral,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24199,'S_Hallowed_Shield','Hallowed Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Dark,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24200,'S_Saharic_Shield','Saharic Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Water,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24201,'S_Underneath_Shield','Underneath Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Earth,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24202,'S_Flam_Shield','Flame Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Fire,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24203,'S_Windy_Shield','Windy Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Wind,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24204,'S_Envenom_Shield','Envenom Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Poison,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24205,'S_Damned_Shield','Damned Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Holy,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24206,'S_Geist_Shield','Exorcism Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Ghost,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24207,'S_Divine_Shield','Divine Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus2 bSubEle,Ele_Undead,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24208,'S_Expert_Shoes','Expert Shadow Shoes',12,20,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'150:175',1,NULL,'bonus2 bExpAddRace,RC_All,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24209,'S_Expert_Shield','Expert Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'150:175',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/4);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24210,'S_Beginner_Shoes','Beginner Shadow Shoes',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1:49',1,NULL,'bonus2 bExpAddRace,RC_All,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24211,'S_Beginner_Shield','Beginner Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1:49',1,NULL,'bonus2 bExpAddRace,RC_All,getrefine();',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24212,'S_Rookie_Shoes','Rookie Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'50:99',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24213,'S_Rookie_Shield','Rookie Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'50:99',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/2);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24214,'S_Advanced_Shoes','Advanced Shadow Shoes',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'100:149',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24215,'S_Advanced_Shield','Advanced Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'100:149',1,NULL,'bonus2 bExpAddRace,RC_All,(getrefine()/3);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (24216,'Attack_Shadow_Armor','Attack Shadow Armor',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); autobonus "{ bonus bAtk2,(.@r*5); }",(.@r*20)+100,3000,BF_NORMAL;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (24217,'Blitz_Shadow_Earring','Blitz Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); bonus bHit,(.@r/2)+5; if(.@r>=7){ bonus bAspd,1; }',NULL,NULL); REPLACE INTO `item_db_re` VALUES (24218,'Blitz_Shadow_Pendant','Blitz Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); bonus bAtk2,(.@r/2)+5; if(.@r>=7){ bonus bAspd,1; }',NULL,NULL); @@ -11314,18 +11313,18 @@ REPLACE INTO `item_db_re` VALUES (24227,'Enhanced_Soul_Shadow_Weapon','Enhanced REPLACE INTO `item_db_re` VALUES (24228,'Soul_Shadow_Weapon','Soul Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'70',1,NULL,'.@r = getrefine(); bonus bMatkRate,(.@r<7)?1:((.@r<9)?2:3);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (24229,'Soul_Shadow_Earring','Soul Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'70',1,NULL,'.@r = getrefine(); bonus bMatk,(5+.@r); if(.@r>=7) bonus bMaxHPrate,1; if(.@r>=9) bonus bMatkRate,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (24230,'Soul_Shadow_Pendant','Soul Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'70',1,NULL,'.@r = getrefine(); bonus bMatk,(5+.@r); if(.@r>=7) bonus bMaxHPrate,1; if(.@r>=9) bonus bMatkRate,1;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24231,'Blitz_Shadow_Shoes','Blitz Shadow Shoes',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bFlee,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24232,'Blitz_Shadow_Shield','Blitz Shadow Shield',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bCritical,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24233,'Exceeding_Shadow_Weapon','Exceeding Shadow Weapon',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'100',1,NULL,'.@r = getrefine()/2; bonus bBaseAtk,5; bonus bMatk,5; bonus bAtkRate,.@r; bonus bMatkRate,.@r;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24234,'Titan_Shadow_Earring','Titan Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24235,'Titan_Shadow_Pendant','Titan Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24236,'Boned_Shadow_Earring','Boned Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24237,'Boned_Shadow_Pendant','Boned Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24238,'Gigantic_Shadow_Earring','Gigantic Shadow Earring',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24239,'Gigantic_Shadow_Pendant','Gigantic Shadow Pendant',12,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24243,'Reload_Shadow_Shoes','Reload Shadow Shoes',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'.@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24244,'Reload_Shadow_Shield','Reload Shadow Shield',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3);',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (24245,'Reload_Shadow_Armor','Reload Shadow Armor',12,20,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24231,'S_Blitz_Shoes','Blitz Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'bonus bFlee,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24232,'S_Blitz_Shield','Blitz Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'bonus bCritical,5; .@r = getrefine(); if(.@r>=2){ bonus bCritical,2; } if(.@r>=7){ bonus bAspd,1; } if(.@r>=9){ bonus bAspd,1; }',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24233,'S_Exceed_Weapon','Exceeding Shadow Weapon',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,131072,NULL,'100',1,NULL,'.@r = getrefine()/2; bonus bBaseAtk,5; bonus bMatk,5; bonus bAtkRate,.@r; bonus bMatkRate,.@r;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24234,'S_Titan_Earring','Titan Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24235,'S_Titan_Pendant','Titan Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Large,.@rate; bonus2 bMagicAddSize,Size_Large,.@rate;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24236,'S_Boned_Earring','Boned Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24237,'S_Boned_Pendant','Boned Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Medium,.@rate; bonus2 bMagicAddSize,Size_Medium,.@rate;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24238,'S_Gigantic_Earring','Gigantic Shadow Earring',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1048576,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24239,'S_Gigantic_Pendant','Gigantic Shadow Pendant',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,2097152,NULL,'1',1,NULL,'.@r = getrefine(); .@rate = (.@r<7)?1:((.@r<9)?2:4); bonus2 bAddSize,Size_Small,.@rate; bonus2 bMagicAddSize,Size_Small,.@rate;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24243,'S_Reload_Shoes','Reload Shadow Shoes',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,524288,NULL,'1',1,NULL,'.@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24244,'S_Reload_Shield','Reload Shadow Shield',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,262144,NULL,'1',1,NULL,'.@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (24245,'S_Reload_Armor','Reload Shadow Armor',12,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,65536,NULL,'1',1,NULL,'.@r = getrefine(); bonus bDelayrate,(.@r<7)?-1:((.@r<9)?-2:-3);',NULL,NULL); # REPLACE INTO `item_db_re` VALUES (25132,'Pumpkin_Deco','Pumpkin Deco',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (25133,'Dried_White_Stem','Dried White Stem',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); From 12ca9a05e07fc669516a2cfbe4e585b4cc252340 Mon Sep 17 00:00:00 2001 From: Jittapan Pluemsumran <nightsheep@outlook.com> Date: Tue, 1 Nov 2016 16:12:37 +0700 Subject: [PATCH 41/67] Add Discord link --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index aa5e0c6c95..560bf1eb29 100644 --- a/README.md +++ b/README.md @@ -160,6 +160,9 @@ Examples: * irc://irc.rizon.net/rathena * Web Chat: https://rathena.org/board/page/chat.html +* rAthena Discord Chat + https://discord.gg/0XP9qqhUV9GLSfCh + * rAthena Wiki https://rathena.org/board/index.php?app=ipbwiki From 4753407d632fa4b8b53e8e03243e11282cf0b306 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh <cydh@pservero.com> Date: Tue, 1 Nov 2016 20:32:22 +0700 Subject: [PATCH 42/67] Fixed memleak when player's string variable is cleared Signed-off-by: Cydh Ramdh <cydh@pservero.com> --- src/map/pc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/map/pc.c b/src/map/pc.c index c5f30c7338..95ce955600 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -9118,6 +9118,8 @@ int pc_setregistry_str(struct map_session_data *sd, int64 reg, const char *val) script_array_update(&sd->regs, reg, false); p->value = aStrdup(val); } else { + if (p->value) + aFree(p->value); p->value = NULL; if( index ) script_array_update(&sd->regs, reg, true); From 485ae6f8cf2dd87ee07ef9df14bd153897fd34cf Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Wed, 2 Nov 2016 10:37:27 +0100 Subject: [PATCH 43/67] Fixed a bug in party creation Fixes #1674 Thanks to @admkakaroto and @Grantea --- src/map/party.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/map/party.c b/src/map/party.c index f98b45c670..29e6732b51 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -435,6 +435,14 @@ int party_reply_invite(struct map_session_data *sd,int party_id,int flag) return 0; } + // The character is already in a party, possibly left a party invite open and created his own party + if( sd->status.party_id != 0 ){ + // On Aegis no rejection packet is sent to the inviting player + sd->party_invite = 0; + sd->party_invite_account = 0; + return 0; + } + tsd = map_id2sd(sd->party_invite_account); if( flag == 1 && !sd->party_creating && !sd->party_joining ) { // accepted and allowed From 418d8203e6f9de744926df78302df9bcd31148cc Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Wed, 2 Nov 2016 11:13:52 +0100 Subject: [PATCH 44/67] Refactored clif functions for unit names (#1664) Refactored clif functions for unit names Renamed clif_charnameack to clif_name and added additional parameters to follow other clif functions. Removed clif_charnameupdate completely since it was just a copy of the BL_PC code in clif_charnameack and replaced all calls with clif_name_area. Fixed guild position display Fixes #1662 Thanks to @ghul3 for reporting it. Removed useless params for some guild functions --- src/map/atcommand.c | 8 ++-- src/map/clif.c | 101 ++++++++++--------------------------------- src/map/clif.h | 9 ++-- src/map/guild.c | 38 ++++++++-------- src/map/guild.h | 2 +- src/map/homunculus.c | 2 +- src/map/mob.c | 8 ++-- src/map/npc.c | 2 +- src/map/party.c | 6 +-- src/map/pc.c | 2 +- src/map/pet.c | 2 +- src/map/script.c | 8 ++-- 12 files changed, 66 insertions(+), 122 deletions(-) diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 2b73803d8c..21af57e5a4 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8020,9 +8020,9 @@ ACMD_FUNC(fakename) if( sd->fakename[0] ) { sd->fakename[0] = '\0'; - clif_charnameack(0, &sd->bl); + clif_name_area(&sd->bl); if (sd->disguise) - clif_charnameack(sd->fd, &sd->bl); + clif_name_self(&sd->bl); clif_displaymessage(sd->fd, msg_txt(sd,1307)); // Returned to real name. return 0; } @@ -8038,9 +8038,9 @@ ACMD_FUNC(fakename) } safestrncpy(sd->fakename, message, sizeof(sd->fakename)); - clif_charnameack(0, &sd->bl); + clif_name_area(&sd->bl); if (sd->disguise) // Another packet should be sent so the client updates the name for sd - clif_charnameack(sd->fd, &sd->bl); + clif_name_self(&sd->bl); clif_displaymessage(sd->fd, msg_txt(sd,1310)); // Fake name enabled. return 0; diff --git a/src/map/clif.c b/src/map/clif.c index 466a56eb70..62c2cd83ff 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7989,14 +7989,16 @@ void clif_guild_created(struct map_session_data *sd,int flag) /// mode: /// &0x01 = allow invite /// &0x10 = allow expel -void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g) +void clif_guild_belonginfo(struct map_session_data *sd) { int ps,fd; + struct guild* g; + nullpo_retv(sd); - nullpo_retv(g); + nullpo_retv(g = sd->guild); fd=sd->fd; - ps=guild_getposition(g,sd); + ps=guild_getposition(sd); WFIFOHEAD(fd,packet_len(0x16c)); WFIFOW(fd,0)=0x16c; WFIFOL(fd,2)=g->guild_id; @@ -8402,12 +8404,13 @@ void clif_guild_skillinfo(struct map_session_data* sd) /// Sends guild notice to client (ZC_GUILD_NOTICE). /// 016f <subject>.60B <notice>.120B -void clif_guild_notice(struct map_session_data* sd, struct guild* g) +void clif_guild_notice(struct map_session_data* sd) { int fd; + struct guild* g; nullpo_retv(sd); - nullpo_retv(g); + nullpo_retv(g = sd->guild); fd = sd->fd; @@ -9240,14 +9243,16 @@ void clif_refresh(struct map_session_data *sd) /// Updates the object's (bl) name on client. +/// Used to update when a char leaves a party/guild. [Skotlex] +/// Needed because when you send a 0x95 packet, the client will not remove the cached party/guild info that is not sent. /// 0095 <id>.L <char name>.24B (ZC_ACK_REQNAME) /// 0195 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B (ZC_ACK_REQNAMEALL) /// 0a30 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B <title ID>.L (ZC_ACK_REQNAMEALL2) -void clif_charnameack (int fd, struct block_list *bl) -{ +void clif_name( struct block_list* src, struct block_list *bl, send_target target ){ unsigned char buf[106]; int cmd = 0x95; + nullpo_retv(src); nullpo_retv(bl); WBUFW(buf,0) = cmd; @@ -9267,7 +9272,7 @@ void clif_charnameack (int fd, struct block_list *bl) #endif //Requesting your own "shadow" name. [Skotlex] - if( sd->fd == fd && sd->disguise ){ + if( src == bl && target == SELF && sd->disguise ){ WBUFL(buf,2) = -bl->id; } @@ -9293,12 +9298,13 @@ void clif_charnameack (int fd, struct block_list *bl) } if( sd->guild ){ - int i; + int position; - ARR_FIND(0, sd->guild->max_member, i, sd->guild->member[i].account_id == sd->status.account_id && sd->guild->member[i].char_id == sd->status.char_id); + // Will get the position of the guild the player is in + position = guild_getposition(sd); safestrncpy(WBUFCP(buf,54), sd->guild->name,NAME_LENGTH); - safestrncpy(WBUFCP(buf,78), sd->guild->position[i].name, NAME_LENGTH); + safestrncpy(WBUFCP(buf,78), sd->guild->position[position].name, NAME_LENGTH); }else{ //Assume no guild. WBUFB(buf,54) = 0; WBUFB(buf,78) = 0; @@ -9365,76 +9371,13 @@ void clif_charnameack (int fd, struct block_list *bl) safestrncpy(WBUFCP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH); break; default: - ShowError("clif_charnameack: bad type %d(%d)\n", bl->type, bl->id); + ShowError("clif_name: bad type %d(%d)\n", bl->type, bl->id); return; } - // if no receipient specified just update nearby clients - if (fd == 0) - clif_send(buf, packet_len(cmd), bl, AREA); - else { - WFIFOHEAD(fd, packet_len(cmd)); - memcpy(WFIFOP(fd, 0), buf, packet_len(cmd)); - WFIFOSET(fd, packet_len(cmd)); - } + clif_send(buf, packet_len(cmd), src, target); } - -//Used to update when a char leaves a party/guild. [Skotlex] -//Needed because when you send a 0x95 packet, the client will not remove the cached party/guild info that is not sent. -void clif_charnameupdate (struct map_session_data *ssd) -{ - unsigned char buf[103]; - int cmd = 0x195, ps = -1; - struct party_data *p = NULL; - struct guild *g = NULL; - - nullpo_retv(ssd); - - if( ssd->fakename[0] ) - return; //No need to update as the party/guild was not displayed anyway. - - WBUFW(buf,0) = cmd; - WBUFL(buf,2) = ssd->bl.id; - - safestrncpy(WBUFCP(buf,6), ssd->status.name, NAME_LENGTH); - - if (!battle_config.display_party_name) { - if (ssd->status.party_id > 0 && ssd->status.guild_id > 0 && (g = ssd->guild) != NULL) - p = party_search(ssd->status.party_id); - }else{ - if (ssd->status.party_id > 0) - p = party_search(ssd->status.party_id); - } - - if( ssd->status.guild_id > 0 && (g = ssd->guild) != NULL ) - { - int i; - ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id); - if( i < g->max_member ) ps = g->member[i].position; - } - - if( p ) - safestrncpy(WBUFCP(buf,30), p->party.name, NAME_LENGTH); - else - WBUFB(buf,30) = 0; - - if( g && ps >= 0 && ps < MAX_GUILDPOSITION ) - { - safestrncpy(WBUFCP(buf,54), g->name,NAME_LENGTH); - safestrncpy(WBUFCP(buf,78), g->position[ps].name, NAME_LENGTH); - } - else - { - WBUFB(buf,54) = 0; - WBUFB(buf,78) = 0; - } - - // Update nearby clients - clif_send(buf, packet_len(cmd), &ssd->bl, AREA); -} - - /// Taekwon Jump (TK_HIGHJUMP) effect (ZC_HIGHJUMP). /// 01ff <id>.L <x>.W <y>.W /// @@ -10308,7 +10251,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) #endif if (sd->guild && battle_config.guild_notice_changemap == 1) - clif_guild_notice(sd, sd->guild); // Displays after VIP + clif_guild_notice(sd); // Displays after VIP if( (battle_config.bg_flee_penalty != 100 || battle_config.gvg_flee_penalty != 100) && (map_flag_gvg(sd->state.pmap) || map_flag_gvg(sd->bl.m) || map[sd->state.pmap].flag.battleground || map[sd->bl.m].flag.battleground) ) @@ -10367,7 +10310,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) if( channel_config.map_enable && channel_config.map_autojoin && !map[sd->bl.m].flag.chmautojoin && !map[sd->bl.m].instance_id ) channel_mjoin(sd); //join new map } else if (sd->guild && (battle_config.guild_notice_changemap == 2 || guild_notice)) - clif_guild_notice(sd, sd->guild); // Displays at end + clif_guild_notice(sd); // Displays at end mail_clear(sd); @@ -10676,7 +10619,7 @@ void clif_parse_GetCharNameRequest(int fd, struct map_session_data *sd) } */ - clif_charnameack(fd, bl); + clif_name(&sd->bl,bl,SELF); } diff --git a/src/map/clif.h b/src/map/clif.h index 03049c5dcb..eb90ba2e9a 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -672,8 +672,9 @@ void clif_wis_message(int fd, const char* nick, const char* mes, int mes_len); void clif_wis_end(int fd, int result); void clif_solved_charname(int fd, int charid, const char* name); -void clif_charnameack(int fd, struct block_list *bl); -void clif_charnameupdate(struct map_session_data *ssd); +void clif_name( struct block_list* src, struct block_list *bl, send_target target ); +#define clif_name_self(bl) clif_name( (bl), (bl), SELF ) +#define clif_name_area(bl) clif_name( (bl), (bl), AREA ) void clif_use_card(struct map_session_data *sd,int idx); void clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int flag); @@ -731,7 +732,7 @@ void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp); // guild void clif_guild_created(struct map_session_data *sd,int flag); -void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g); +void clif_guild_belonginfo(struct map_session_data *sd); void clif_guild_masterormember(struct map_session_data *sd); void clif_guild_basicinfo(struct map_session_data *sd); void clif_guild_allianceinfo(struct map_session_data *sd); @@ -747,7 +748,7 @@ void clif_guild_positionchanged(struct guild *g,int idx); void clif_guild_memberpositionchanged(struct guild *g,int idx); void clif_guild_emblem(struct map_session_data *sd,struct guild *g); void clif_guild_emblem_area(struct block_list* bl); -void clif_guild_notice(struct map_session_data* sd, struct guild* g); +void clif_guild_notice(struct map_session_data* sd); void clif_guild_message(struct guild *g,uint32 account_id,const char *mes,int len); void clif_guild_reqalliance(struct map_session_data *sd,uint32 account_id,const char *name); void clif_guild_allianceack(struct map_session_data *sd,int flag); diff --git a/src/map/guild.c b/src/map/guild.c index 52b2d423c0..0715c6593a 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -241,11 +241,11 @@ int guild_getindex(struct guild *g,uint32 account_id,uint32 char_id) { } /// lookup: player sd -> member position -int guild_getposition(struct guild* g, struct map_session_data* sd) { +int guild_getposition(struct map_session_data* sd) { int i; + struct guild *g; - if( g == NULL && (g=sd->guild) == NULL ) - return -1; + nullpo_retr( -1, g = sd->guild ); ARR_FIND( 0, g->max_member, i, g->member[i].account_id == sd->status.account_id && g->member[i].char_id == sd->status.char_id ); return( i < g->max_member ) ? g->member[i].position : -1; @@ -505,7 +505,7 @@ int guild_recv_info(struct guild *sg) { //Also set the guild master flag. sd->guild = g; sd->state.gmaster_flag = 1; - clif_charnameupdate(sd); // [LuzZza] + clif_name_area(&sd->bl); // [LuzZza] clif_guild_masterormember(sd); } } else { @@ -521,7 +521,7 @@ int guild_recv_info(struct guild *sg) { for(i=bm=m=0;i<g->max_member;i++){ if(g->member[i].account_id>0){ sd = g->member[i].sd = guild_sd_check(g->guild_id, g->member[i].account_id, g->member[i].char_id); - if (sd) clif_charnameupdate(sd); // [LuzZza] + if (sd) clif_name_area(&sd->bl); // [LuzZza] m++; }else g->member[i].sd=NULL; @@ -552,8 +552,8 @@ int guild_recv_info(struct guild *sg) { clif_guild_skillinfo(sd); //Submit information skills if (guild_new) { // Send information and affiliation if unsent - clif_guild_belonginfo(sd, g); - clif_guild_notice(sd, g); + clif_guild_belonginfo(sd); + clif_guild_notice(sd); sd->guild_emblem_id = g->emblem_id; } if (g->instance_id != 0) @@ -588,7 +588,7 @@ int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) { if(tsd==NULL || g==NULL) return 0; - if( (i=guild_getposition(g,sd))<0 || !(g->position[i].mode&0x0001) ) + if( (i=guild_getposition(sd))<0 || !(g->position[i].mode&0x0001) ) return 0; //Invite permission. if(!battle_config.invite_request_check) { @@ -742,8 +742,8 @@ int guild_member_added(int guild_id,uint32 account_id,uint32 char_id,int flag) { sd->guild_emblem_id = g->emblem_id; sd->guild = g; //Packets which were sent in the previous 'guild_sent' implementation. - clif_guild_belonginfo(sd,g); - clif_guild_notice(sd,g); + clif_guild_belonginfo(sd); + clif_guild_notice(sd); //TODO: send new emblem info to others @@ -800,7 +800,7 @@ int guild_expulsion(struct map_session_data* sd, int guild_id, uint32 account_id if(sd->status.guild_id!=guild_id) return 0; - if( (ps=guild_getposition(g,sd))<0 || !(g->position[ps].mode&0x0010) ) + if( (ps=guild_getposition(sd))<0 || !(g->position[ps].mode&0x0010) ) return 0; //Expulsion permission //Can't leave inside guild castles. @@ -883,7 +883,7 @@ int guild_member_withdraw(int guild_id, uint32 account_id, uint32 char_id, int f } } - clif_charnameupdate(sd); //Update display name [Skotlex] + clif_name_area(&sd->bl); //Update display name [Skotlex] status_change_end(&sd->bl,SC_LEADERSHIP,INVALID_TIMER); status_change_end(&sd->bl,SC_GLORYWOUNDS,INVALID_TIMER); status_change_end(&sd->bl,SC_SOULCOLD,INVALID_TIMER); @@ -960,7 +960,7 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online) { // clea } if(sd->state.connect_new) { //Note that this works because it is invoked in parse_LoadEndAck before connect_new is cleared. - clif_guild_belonginfo(sd,g); + clif_guild_belonginfo(sd); sd->guild_emblem_id = g->emblem_id; } return 0; @@ -1074,7 +1074,7 @@ int guild_memberposition_changed(struct guild *g,int idx,int pos) { // Update char position in client [LuzZza] if(g->member[idx].sd != NULL) - clif_charnameupdate(g->member[idx].sd); + clif_name_area(&g->member[idx].sd->bl); return 0; } @@ -1108,7 +1108,7 @@ int guild_position_changed(int guild_id,int idx,struct guild_position *p) { // Update char name in client [LuzZza] for(i=0;i<g->max_member;i++) if(g->member[i].position == idx && g->member[i].sd != NULL) - clif_charnameupdate(g->member[i].sd); + clif_name_area(&g->member[i].sd->bl); return 0; } @@ -1138,7 +1138,7 @@ int guild_notice_changed(int guild_id,const char *mes1,const char *mes2) { for(i=0;i<g->max_member;i++){ struct map_session_data *sd = g->member[i].sd; if(sd != NULL) - clif_guild_notice(sd,g); + clif_guild_notice(sd); } return 0; } @@ -1176,7 +1176,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) { for(i=0;i<g->max_member;i++){ if((sd=g->member[i].sd)!=NULL){ sd->guild_emblem_id=emblem_id; - clif_guild_belonginfo(sd,g); + clif_guild_belonginfo(sd); clif_guild_emblem(sd,g); clif_guild_emblem_area(&sd->bl); } @@ -1248,7 +1248,7 @@ unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp) { if (sd->status.guild_id == 0 || (g = sd->guild) == NULL || - (per = guild_getposition(g,sd)) < 0 || + (per = guild_getposition(sd)) < 0 || (per = g->position[per].exp_mode) < 1) return 0; @@ -1729,7 +1729,7 @@ int guild_broken(int guild_id,int flag) { sd->guild = NULL; sd->state.gmaster_flag = 0; clif_guild_broken(g->member[i].sd,0); - clif_charnameupdate(sd); // [LuzZza] + clif_name_area(&sd->bl); // [LuzZza] status_change_end(&sd->bl,SC_LEADERSHIP,INVALID_TIMER); status_change_end(&sd->bl,SC_GLORYWOUNDS,INVALID_TIMER); status_change_end(&sd->bl,SC_SOULCOLD,INVALID_TIMER); diff --git a/src/map/guild.h b/src/map/guild.h index fd5215aa1a..3e05373134 100644 --- a/src/map/guild.h +++ b/src/map/guild.h @@ -40,7 +40,7 @@ struct guild_castle* guild_mapindex2gc(short mapindex); struct map_session_data *guild_getavailablesd(struct guild *g); int guild_getindex(struct guild *g,uint32 account_id,uint32 char_id); -int guild_getposition(struct guild *g, struct map_session_data *sd); +int guild_getposition(struct map_session_data *sd); unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp); int guild_getexp(struct map_session_data *sd,int exp); // [Celest] diff --git a/src/map/homunculus.c b/src/map/homunculus.c index 5808262e9f..c3de36d98b 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -959,7 +959,7 @@ void hom_change_name_ack(struct map_session_data *sd, char* name, int flag) return; } safestrncpy(hd->homunculus.name,name,NAME_LENGTH); - clif_charnameack (0,&hd->bl); + clif_name_area(&hd->bl); hd->homunculus.rename_flag = 1; clif_hominfo(sd,hd,0); } diff --git a/src/map/mob.c b/src/map/mob.c index 3b5a571339..76eee531ad 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2244,7 +2244,7 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage) } if (battle_config.show_mob_info&3) - clif_charnameack(0, &md->bl); + clif_name_area(&md->bl); #if PACKETVER >= 20120404 if( battle_config.monster_hp_bars_info){ @@ -2912,7 +2912,7 @@ void mob_revive(struct mob_data *md, unsigned int hp) skill_unit_move(&md->bl,tick,1); mobskill_use(md, tick, MSC_SPAWN); if (battle_config.show_mob_info&3) - clif_charnameack (0, &md->bl); + clif_name_area(&md->bl); } int mob_guardian_guildchange(struct mob_data *md) @@ -3045,7 +3045,7 @@ int mob_class_change (struct mob_data *md, int mob_id) md->target_id = md->attacked_id = md->norm_attacked_id = 0; //Need to update name display. - clif_charnameack(0, &md->bl); + clif_name_area(&md->bl); return 0; } @@ -3055,7 +3055,7 @@ int mob_class_change (struct mob_data *md, int mob_id) void mob_heal(struct mob_data *md,unsigned int heal) { if (battle_config.show_mob_info&3) - clif_charnameack (0, &md->bl); + clif_name_area(&md->bl); #if PACKETVER >= 20120404 if( battle_config.monster_hp_bars_info){ int i; diff --git a/src/map/npc.c b/src/map/npc.c index c4da18d04a..174de92949 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -3516,7 +3516,7 @@ void npc_setdisplayname(struct npc_data* nd, const char* newname) safestrncpy(nd->name, newname, sizeof(nd->name)); if( map[nd->bl.m].users ) - clif_charnameack(0, &nd->bl); + clif_name_area(&nd->bl); } /// Changes the display class of the npc. diff --git a/src/map/party.c b/src/map/party.c index 29e6732b51..aa8c68f714 100644 --- a/src/map/party.c +++ b/src/map/party.c @@ -332,7 +332,7 @@ int party_recv_info(struct party* sp, uint32 char_id) if( sd == NULL ) continue;// not online - clif_charnameupdate(sd); //Update other people's display. [Skotlex] + clif_name_area(&sd->bl); //Update other people's display. [Skotlex] clif_party_member_info(p,sd); // Only send this on party creation, otherwise it will be sent by party_send_movemap [Lemongrass] if( sd->party_creating ){ @@ -536,7 +536,7 @@ int party_member_added(int party_id,uint32 account_id,uint32 char_id, int flag) clif_party_hp(sd); clif_party_xy(sd); - clif_charnameupdate(sd); //Update char name's display [Skotlex] + clif_name_area(&sd->bl); //Update char name's display [Skotlex] if( p->instance_id ) instance_reqinfo(sd,p->instance_id); @@ -647,7 +647,7 @@ int party_member_withdraw(int party_id, uint32 account_id, uint32 char_id, char #endif sd->status.party_id = 0; - clif_charnameupdate(sd); //Update name display [Skotlex] + clif_name_area(&sd->bl); //Update name display [Skotlex] //TODO: hp bars should be cleared too if( p->instance_id ) { diff --git a/src/map/pc.c b/src/map/pc.c index 95ce955600..ef43cfd97b 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7642,7 +7642,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) if( battle_config.show_mob_info&4 ) {// update name with new level - clif_charnameack(0, &md->bl); + clif_name_area(&md->bl); } } src = battle_get_master(src); // Maybe Player Summon diff --git a/src/map/pet.c b/src/map/pet.c index c77ccaf312..35a2bbff56 100644 --- a/src/map/pet.c +++ b/src/map/pet.c @@ -838,7 +838,7 @@ int pet_change_name_ack(struct map_session_data *sd, char* name, int flag) } memcpy(pd->pet.name, name, NAME_LENGTH); - clif_charnameack (0,&pd->bl); + clif_name_area(&pd->bl); pd->pet.rename_flag = 1; clif_pet_equip_area(pd); clif_send_petstatus(sd); diff --git a/src/map/script.c b/src/map/script.c index 2e09f1312c..49f0f2609f 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -17232,8 +17232,8 @@ BUILDIN_FUNC(setunitdata) switch (type) { case UMOB_SIZE: md->status.size = (unsigned char)value; break; case UMOB_LEVEL: md->level = (unsigned short)value; break; - case UMOB_HP: status_set_hp(bl, (unsigned int)value, 0); clif_charnameack(0, &md->bl); break; - case UMOB_MAXHP: status_set_maxhp(bl, (unsigned int)value, 0); clif_charnameack(0, &md->bl); break; + case UMOB_HP: status_set_hp(bl, (unsigned int)value, 0); clif_name_area(&md->bl); break; + case UMOB_MAXHP: status_set_maxhp(bl, (unsigned int)value, 0); clif_name_area(&md->bl); break; case UMOB_MASTERAID: md->master_id = value; break; case UMOB_MAPID: if (mapname) value = map_mapname2mapid(mapname); unit_warp(bl, (short)value, 0, 0, CLR_TELEPORT); break; case UMOB_X: if (!unit_walktoxy(bl, (short)value, md->bl.y, 2)) unit_movepos(bl, (short)value, md->bl.y, 0, 0); break; @@ -17637,7 +17637,7 @@ BUILDIN_FUNC(setunitname) ShowWarning("buildin_setunitname: Unknown object type!\n"); return SCRIPT_CMD_FAILURE; } - clif_charnameack(0, bl); // Send update to client. + clif_name_area(bl); // Send update to client. return SCRIPT_CMD_SUCCESS; } @@ -18893,7 +18893,7 @@ BUILDIN_FUNC(bg_monster_set_team) mob_stop_attack(md); mob_stop_walking(md, 0); md->target_id = md->attacked_id = 0; - clif_charnameack(0, &md->bl); + clif_name_area(&md->bl); return SCRIPT_CMD_SUCCESS; } From 378b4dd5699fe9220b65d6925add5a1da7cece56 Mon Sep 17 00:00:00 2001 From: Aleos <aleos89@users.noreply.github.com> Date: Wed, 2 Nov 2016 18:06:27 -0400 Subject: [PATCH 45/67] Adjusted the Discord link in the README * Follow up to 12ca9a0. * Adjusted the link to a human readable format. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 560bf1eb29..ceeceec661 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ Examples: * Web Chat: https://rathena.org/board/page/chat.html * rAthena Discord Chat - https://discord.gg/0XP9qqhUV9GLSfCh + https://discord.rathena.org * rAthena Wiki https://rathena.org/board/index.php?app=ipbwiki From 9f888077c1a91572eacd6a108f1d24e4bbb97a41 Mon Sep 17 00:00:00 2001 From: Akkarinage <akkarin@rathena.org> Date: Wed, 2 Nov 2016 22:35:34 +0000 Subject: [PATCH 46/67] Adjusted Discord link in Readme.md * Follow up to 378b4dd --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ceeceec661..8308415dea 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,7 @@ Examples: * Web Chat: https://rathena.org/board/page/chat.html * rAthena Discord Chat - https://discord.rathena.org + http://discord.rathena.org * rAthena Wiki https://rathena.org/board/index.php?app=ipbwiki From 06aec011c82bd5a846db4dd92e9bb2641dcd7fc9 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Thu, 3 Nov 2016 10:17:19 -0400 Subject: [PATCH 47/67] Fixed a potential map crash * Follow up to dc8d466. --- src/map/skill.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 93504ec7da..2b0a5f72fa 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5086,14 +5086,14 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint #endif case RK_DRAGONBREATH_WATER: case RK_DRAGONBREATH: - if( tsc->data[SC_HIDING] ) + if( tsc && tsc->data[SC_HIDING] ) clif_skill_nodamage(src,src,skill_id,skill_lv,1); else skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; case NPC_SELFDESTRUCTION: - if( tsc->data[SC_HIDING] ) + if( tsc && tsc->data[SC_HIDING] ) break; case HVAN_EXPLOSION: if (src != bl) From cc733a95163a4e0cfbd8f8e8713cc772718c9a62 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Thu, 3 Nov 2016 18:10:34 -0400 Subject: [PATCH 48/67] Corrected Voice of Siren's behavior (fixes #1680) * Resolves traps not being avoided when the Maestro/Wanderer has enticed the trapper. --- src/map/skill.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/map/skill.c b/src/map/skill.c index 2b0a5f72fa..3f169a3f22 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -13365,7 +13365,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns struct block_list *ss; TBL_PC* tsd; struct status_data *tstatus; - struct status_change *tsc; + struct status_change *sc, *tsc; struct skill_unit_group_tickset *ts; enum sc_type type; uint16 skill_id; @@ -13382,10 +13382,14 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns tsd = BL_CAST(BL_PC, bl); tsc = status_get_sc(bl); + sc = status_get_sc(ss); tstatus = status_get_status_data(bl); type = status_skill2sc(sg->skill_id); skill_id = sg->skill_id; + if (sc && sc->data[SC_VOICEOFSIREN] && sc->data[SC_VOICEOFSIREN]->val2 == bl->id && (skill_get_inf2(skill_id)&INF2_TRAP)) + return 0; // Traps cannot be activated by the Maestro or Wanderer that enticed the trapper with this skill. + if (tsc && tsc->data[SC_HOVERING] && skill_get_inf3(skill_id)&INF3_NO_EFF_HOVERING) return 0; // Under Hovering characters are immune to trap and ground target skills. From 6e9776203a473b688f01892d23d1596ea7cd4f7f Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Thu, 3 Nov 2016 21:17:34 -0400 Subject: [PATCH 49/67] Corrected Crazy Vines behavior (fixes #1522 and fixes #1689) * Crazy Vines will now properly remove all ground type skills. * Removed UF_REM_CRAZYWEED enum. --- db/pre-re/skill_unit_db.txt | 30 +++++++++++++++--------------- db/re/skill_unit_db.txt | 30 +++++++++++++++--------------- src/map/skill.c | 16 +--------------- src/map/skill.h | 2 +- 4 files changed, 32 insertions(+), 46 deletions(-) diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index 98c320528f..9b62846587 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -20,7 +20,7 @@ // 0x00800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out // 0x01000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged) // 0x02000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center. -// 0x04000(UF_REM_CRAZYWEED) Removed if be overlapped by GN_CRAZYWEED +// 0x04000(UF_NONE) Free // 0x08000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN // 0x10000(UF_KNOCKBACK_GROUP) Knock back a whole skill group (by default, skill unit is knocked back each unit) // 0x20000(UF_HIDDEN_TRAP) Hidden trap, see 'traps_setting' skill config to enable this flag @@ -32,14 +32,14 @@ // u1 u2 lay r intr target flag // - 12,0x7e, , 0, 0, -1,all, 0x4003 //MG_SAFETYWALL + 12,0x7e, , 0, 0, -1,all, 0x003 //MG_SAFETYWALL 18,0x7f, , -1, 0, 20,enemy, 0x8010 //MG_FIREWALL 21,0x86, , 0, 2:2:2:2:2:2:2:2:2:2:3,1000,enemy, 0x010 //MG_THUNDERSTORM - 25,0x85, , 1, 0, -1,all, 0x6003 //AL_PNEUMA + 25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA 27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP 70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY 79,0x84, , -1, 1,3000,enemy, 0x8018 //PR_MAGNUS - 80,0x87,0x88, 0, 1,2000,enemy, 0x4006 //WZ_FIREPILLAR + 80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR 83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR 85,0x86, , 5:5:5:5:5:5:5:5:5:5:7, 1,1250,enemy,0x018 //WZ_VERMILION 86,0x86, , 0:1:1:2:2:2:2:2:2:2, 0,-1,noone, 0x010 //WZ_WATERBALL @@ -61,10 +61,10 @@ 220,0xb0, , 0, 0, -1,all, 0x8002 //RG_GRAFFITI 229,0xb1, , 0, 1,1000,enemy, 0x006 //AM_DEMONSTRATION 254,0x86, , -1, 0, 300,enemy, 0x010 //CR_GRANDCROSS -285,0x9a, , 3, 0, -1,all, 0xC010 //SA_VOLCANO -286,0x9b, , 3, 0, -1,all, 0xC010 //SA_DELUGE -287,0x9c, , 3, 0, -1,all, 0xC010 //SA_VIOLENTGALE -288,0x9d, , 3:3:4:4:5,0, -1,all, 0xC010 //SA_LANDPROTECTOR +285,0x9a, , 3, 0, -1,all, 0x8010 //SA_VOLCANO +286,0x9b, , 3, 0, -1,all, 0x8010 //SA_DELUGE +287,0x9c, , 3, 0, -1,all, 0x8010 //SA_VIOLENTGALE +288,0x9d, , 3:3:4:4:5,0, -1,all, 0x8010 //SA_LANDPROTECTOR 306,0x9e, , 4, 0,6000,enemy, 0x200 //BD_LULLABY 307,0x9f, , 4, 0, -1,enemy, 0x220 //BD_RICHMANKIM 308,0xa0, , 4, 0, -1,enemy, 0x200 //BD_ETERNALCHAOS @@ -130,10 +130,10 @@ 2274,0xe3, , 2, 0, -1,ally, 0x000 //NC_STEALTHFIELD 2299,0xcc, , 0, 1,1000,all, 0x8006 //SC_MANHOLE -2300,0xcd, , 0, 0,1000,all, 0xC006 //SC_DIMENSIONDOOR -2301,0xce, , 2, 0,1000,all, 0xE00E //SC_CHAOSPANIC -2302,0xcf, , 2, 0, -1,all, 0xE002 //SC_MAELSTROM -2303,0xd0, , 3, 0, -1,all, 0xE058 //SC_BLOODYLUST +2300,0xcd, , 0, 0,1000,all, 0x8006 //SC_DIMENSIONDOOR +2301,0xce, , 2, 0,1000,all, 0xA00E //SC_CHAOSPANIC +2302,0xcf, , 2, 0, -1,all, 0xA002 //SC_MAELSTROM +2303,0xd0, , 3, 0, -1,all, 0xA058 //SC_BLOODYLUST 2304,0xd1, , 0, 2, 500,enemy, 0x018 //SC_FEINTBOMB 2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING @@ -155,13 +155,13 @@ 2467,0xf3, , 0, 1,1000,all, 0x010 //SO_WIND_INSIGNIA 2468,0xf4, , 0, 1,1000,all, 0x010 //SO_EARTH_INSIGNIA -2479,0xe5, , 0, 1,1000,enemy, 0xC006 //GN_THORNS_TRAP -2482,0xe6,0x7f, -1, 1, 300,enemy, 0xC000 //GN_WALLOFTHORN +2479,0xe5, , 0, 1,1000,enemy, 0x8006 //GN_THORNS_TRAP +2482,0xe6,0x7f, -1, 1, 300,enemy, 0x8000 //GN_WALLOFTHORN 2484,0x86, , 0, 1, 100,enemy, 0x080 //GN_CRAZYWEED_ATK 2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE 2487,0xe8, , 2, 0, -1,all, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER 2488,0xe9, , 2, 0, -1,all, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS -2490,0xea, , 0, 1,1000,enemy, 0xC002 //GN_HELLS_PLANT +2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT 2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP 2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index c98e0b9929..e9319c3f85 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -20,7 +20,7 @@ // 0x00800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out // 0x01000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged) // 0x02000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center. -// 0x04000(UF_REM_CRAZYWEED) Removed if be overlapped by GN_CRAZYWEED +// 0x04000(UF_NONE) Free // 0x08000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN // 0x10000(UF_KNOCKBACK_GROUP) Knock back a whole skill group (by default, skill unit is knocked back each unit) // 0x20000(UF_HIDDEN_TRAP) Hidden trap, see 'traps_setting' skill config to enable this flag @@ -32,14 +32,14 @@ // u1 u2 lay r intr target flag // - 12,0x7e, , 0, 0, -1,all, 0x4003 //MG_SAFETYWALL + 12,0x7e, , 0, 0, -1,all, 0x003 //MG_SAFETYWALL 18,0x7f, , -1, 0, 20,enemy, 0x8010 //MG_FIREWALL 21,0x86, , 0, 2:2:2:2:2:2:2:2:2:2:3,1000,enemy, 0x010 //MG_THUNDERSTORM - 25,0x85, , 1, 0, -1,all, 0x6003 //AL_PNEUMA + 25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA 27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP 70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY 79,0x84, , -1, 1,3000,enemy, 0x8018 //PR_MAGNUS - 80,0x87,0x88, 0, 1,2000,enemy, 0x4006 //WZ_FIREPILLAR + 80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR 83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR 85,0x86, , 5:5:5:5:5:5:5:5:5:5:7, 1,1250,enemy,0x018 //WZ_VERMILION 86,0x86, , 0:1:1:2:2:2:2:2:2:2, 0,-1,noone, 0x010 //WZ_WATERBALL @@ -61,10 +61,10 @@ 220,0xb0, , 0, 0, -1,all, 0x8002 //RG_GRAFFITI 229,0xb1, , 0, 1, 500,enemy, 0x006 //AM_DEMONSTRATION 254,0x86, , -1, 0, 300,enemy, 0x010 //CR_GRANDCROSS -285,0x9a, , 3, 0, -1,all, 0xC010 //SA_VOLCANO -286,0x9b, , 3, 0, -1,all, 0xC010 //SA_DELUGE -287,0x9c, , 3, 0, -1,all, 0xC010 //SA_VIOLENTGALE -288,0x9d, , 3:3:4:4:5,0, -1,all, 0xC010 //SA_LANDPROTECTOR +285,0x9a, , 3, 0, -1,all, 0xA010 //SA_VOLCANO +286,0x9b, , 3, 0, -1,all, 0xA010 //SA_DELUGE +287,0x9c, , 3, 0, -1,all, 0xA010 //SA_VIOLENTGALE +288,0x9d, , 3:3:4:4:5,0, -1,all, 0xA010 //SA_LANDPROTECTOR 306,0x9e, , 4, 0,6000,enemy, 0x200 //BD_LULLABY 307,0x9f, , 4, 0, -1,enemy, 0x220 //BD_RICHMANKIM 308,0xa0, , 4, 0, -1,enemy, 0x8200 //BD_ETERNALCHAOS @@ -131,10 +131,10 @@ 2274,0xe3, , 2, 0, -1,ally, 0x000 //NC_STEALTHFIELD 2299,0xcc, , 0, 1,1000,all, 0x8006 //SC_MANHOLE -2300,0xcd, , 0, 0,1000,all, 0xC006 //SC_DIMENSIONDOOR -2301,0xce, , 2, 0,1000,all, 0xE00E //SC_CHAOSPANIC -2302,0xcf, , 2, 0, -1,all, 0xE002 //SC_MAELSTROM -2303,0xd0, , 3, 0, -1,all, 0xE058 //SC_BLOODYLUST +2300,0xcd, , 0, 0,1000,all, 0x8006 //SC_DIMENSIONDOOR +2301,0xce, , 2, 0,1000,all, 0xA00E //SC_CHAOSPANIC +2302,0xcf, , 2, 0, -1,all, 0xA002 //SC_MAELSTROM +2303,0xd0, , 3, 0, -1,all, 0xA058 //SC_BLOODYLUST 2304,0xd1, , 0, 2, 500,enemy, 0x018 //SC_FEINTBOMB 2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING @@ -156,13 +156,13 @@ 2467,0xf3, , 0, 1,1000,all, 0x010 //SO_WIND_INSIGNIA 2468,0xf4, , 0, 1,1000,all, 0x010 //SO_EARTH_INSIGNIA -2479,0xe5, , 0, 1,1000,enemy, 0xC006 //GN_THORNS_TRAP -2482,0xe6,0x7f, -1, 1, 300,enemy, 0xC000 //GN_WALLOFTHORN +2479,0xe5, , 0, 1,1000,enemy, 0x8006 //GN_THORNS_TRAP +2482,0xe6,0x7f, -1, 1, 300,enemy, 0x8000 //GN_WALLOFTHORN 2484,0x86, , 0, 1, 100,enemy, 0x080 //GN_CRAZYWEED_ATK 2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE 2487,0xe8, , 2, 0, -1,all, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER 2488,0xe9, , 2, 0, -1,all, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS -2490,0xea, , 0, 1,1000,enemy, 0xC002 //GN_HELLS_PLANT +2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT 2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP 2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN diff --git a/src/map/skill.c b/src/map/skill.c index 3f169a3f22..d5f307f968 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -13484,13 +13484,6 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, uns skill_area_temp[3] = 0; skill_attack(skill_get_type(sg->skill_id),ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0); break; - case GN_CRAZYWEED_ATK: - if( bl->type == BL_SKILL ) { - struct skill_unit *su = (struct skill_unit *)bl; - if( su && !(skill_get_inf2(su->group->skill_id)&INF2_TRAP) ) - break; - } - //Fall through default: skill_attack(skill_get_type(sg->skill_id),ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,0); } @@ -17136,6 +17129,7 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap) break; case HW_GANBANTEIN: case LG_EARTHDRIVE: + case GN_CRAZYWEED_ATK: // Officially songs/dances are removed skill_delunit(unit); return 1; @@ -17193,14 +17187,6 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap) return 1; } break; - case GN_CRAZYWEED_ATK: - if (unit->group->skill_id == WZ_FIREPILLAR && unit->group->unit_id != UNT_FIREPILLAR_ACTIVE) - break; - if (skill_get_unit_flag(unit->group->skill_id)&UF_REM_CRAZYWEED) { - skill_delunit(unit); - return 1; - } - break; case RL_FIRE_RAIN: if (skill_get_unit_flag(unit->group->skill_id)&UF_REM_FIRERAIN) { skill_delunit(unit); diff --git a/src/map/skill.h b/src/map/skill.h index 81103651cf..872e28b6d9 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -322,7 +322,7 @@ enum e_skill_unit_flag { UF_DUALMODE = 0x00800, // Spells should trigger both ontimer and onplace/onout/onleft effects. UF_NOKNOCKBACK = 0x01000, // Skill unit cannot be knocked back UF_RANGEDSINGLEUNIT = 0x02000, // hack for ranged layout, only display center - UF_REM_CRAZYWEED = 0x04000, // removed by Crazyweed + UF_FREE = 0x04000, // Free UF_REM_FIRERAIN = 0x08000, // removed by Fire Rain UF_KNOCKBACK_GROUP = 0x10000, // knockback skill unit with its group instead of single unit UF_HIDDEN_TRAP = 0x20000, // Hidden trap [Cydh] From 805f11d9f0e5a1285ed26b5f6a28231e5d325625 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Thu, 3 Nov 2016 21:54:04 -0400 Subject: [PATCH 50/67] Added unit flag UF_CRAZYWEED_IMMUNE * Follow up to 6e97762. * Used to make unit skills immune to Crazy Vine's removal effect. --- db/pre-re/skill_unit_db.txt | 2 +- db/re/skill_unit_db.txt | 2 +- src/map/skill.c | 4 +++- src/map/skill.h | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index 9b62846587..a4a6f26fa0 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -20,7 +20,7 @@ // 0x00800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out // 0x01000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged) // 0x02000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center. -// 0x04000(UF_NONE) Free +// 0x04000(UF_CRAZYWEED_IMMUNE) Immune to GN_CRAZYWEED removal // 0x08000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN // 0x10000(UF_KNOCKBACK_GROUP) Knock back a whole skill group (by default, skill unit is knocked back each unit) // 0x20000(UF_HIDDEN_TRAP) Hidden trap, see 'traps_setting' skill config to enable this flag diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index e9319c3f85..b83eaca77e 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -20,7 +20,7 @@ // 0x00800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out // 0x01000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged) // 0x02000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center. -// 0x04000(UF_NONE) Free +// 0x04000(UF_CRAZYWEED_IMMUNE) Immune to GN_CRAZYWEED removal // 0x08000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN // 0x10000(UF_KNOCKBACK_GROUP) Knock back a whole skill group (by default, skill unit is knocked back each unit) // 0x20000(UF_HIDDEN_TRAP) Hidden trap, see 'traps_setting' skill config to enable this flag diff --git a/src/map/skill.c b/src/map/skill.c index d5f307f968..9a3481988d 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -17127,9 +17127,11 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap) return 1; } break; + case GN_CRAZYWEED_ATK: + if (skill_get_unit_flag(unit->group->skill_id)&UF_CRAZYWEED_IMMUNE) + break; case HW_GANBANTEIN: case LG_EARTHDRIVE: - case GN_CRAZYWEED_ATK: // Officially songs/dances are removed skill_delunit(unit); return 1; diff --git a/src/map/skill.h b/src/map/skill.h index 872e28b6d9..a5df73bb7d 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -322,7 +322,7 @@ enum e_skill_unit_flag { UF_DUALMODE = 0x00800, // Spells should trigger both ontimer and onplace/onout/onleft effects. UF_NOKNOCKBACK = 0x01000, // Skill unit cannot be knocked back UF_RANGEDSINGLEUNIT = 0x02000, // hack for ranged layout, only display center - UF_FREE = 0x04000, // Free + UF_CRAZYWEED_IMMUNE = 0x04000, // Immune to Crazy Weed removal UF_REM_FIRERAIN = 0x08000, // removed by Fire Rain UF_KNOCKBACK_GROUP = 0x10000, // knockback skill unit with its group instead of single unit UF_HIDDEN_TRAP = 0x20000, // Hidden trap [Cydh] From 20e228a7f55804bd96eac770814866e76e26cddf Mon Sep 17 00:00:00 2001 From: Cydh Ramdh <cydh@pservero.com> Date: Sat, 5 Nov 2016 09:59:42 +0700 Subject: [PATCH 51/67] Fixed `npc_cashshop_buy` for 2010-11-16 client or older * Failed to buy item from `itemshop` and `pointshop` NPC * Thanks to Anime s2 that notices this Signed-off-by: Cydh Ramdh <cydh@pservero.com> --- src/map/npc.c | 116 ++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 51 deletions(-) diff --git a/src/map/npc.c b/src/map/npc.c index 174de92949..31e4ce62f5 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -1366,6 +1366,63 @@ int npc_buysellsel(struct map_session_data* sd, int id, int type) return 0; } +/** Payment Process for NPCTYPE_CASHSHOP, NPCTYPE_ITEMSHOP, and NPCTYPE_POINTSHOP + * @param nd NPC Shop data + * @param price Price must be paid + * @param points Total points that player has + * @param sd Player data + * @return e_CASHSHOP_ACK + **/ +static enum e_CASHSHOP_ACK npc_cashshop_process_payment(struct npc_data *nd, int price, int points, struct map_session_data *sd) { + int cost[2] = { 0, 0 }; + + npc_shop_currency_type(sd, nd, cost, false); + + switch(nd->subtype) { + case NPCTYPE_CASHSHOP: + if (cost[1] < points || cost[0] < (price - points)) + return ERROR_TYPE_MONEY; + pc_paycash(sd, price, points, LOG_TYPE_NPC); + break; + case NPCTYPE_ITEMSHOP: + { + struct item_data *id = itemdb_exists(nd->u.shop.itemshop_nameid); + + if (cost[0] < (price - points)) { + char output[CHAT_SIZE_MAX]; + + memset(output, '\0', sizeof(output)); + + sprintf(output, msg_txt(sd, 712), (id) ? id->jname : "NULL", (id) ? id->nameid : 0); // You do not have enough %s (%hu). + clif_colormes(sd->fd, color_table[COLOR_RED], output); + return ERROR_TYPE_PURCHASE_FAIL; + } + if (id) + pc_delitem(sd, pc_search_inventory(sd, nd->u.shop.itemshop_nameid), price - points, 0, 0, LOG_TYPE_NPC); + else + ShowWarning("Failed to delete item %hu from itemshop NPC '%s' (%s, %d, %d)!\n", nd->u.shop.itemshop_nameid, nd->exname, map[nd->bl.m].name, nd->bl.x, nd->bl.y); + } + break; + case NPCTYPE_POINTSHOP: + { + char output[CHAT_SIZE_MAX]; + + memset(output, '\0', sizeof(output)); + + if (cost[0] < (price - points)) { + sprintf(output, msg_txt(sd, 713), nd->u.shop.pointshop_str); // You do not have enough '%s'. + clif_colormes(sd->fd, color_table[COLOR_RED], output); + return ERROR_TYPE_PURCHASE_FAIL; + } + pc_setreg2(sd, nd->u.shop.pointshop_str, cost[0] - (price - points)); + sprintf(output, msg_txt(sd, 716), nd->u.shop.pointshop_str, cost[0] - (price - points)); // Your '%s' is now: %d + clif_disp_onlyself(sd, output, strlen(output) + 1); + } + break; + } + return ERROR_TYPE_NONE; +} + /** * Cash Shop Buy List for clients 2010-11-16 and newer * @param sd: Player data @@ -1376,9 +1433,10 @@ int npc_buysellsel(struct map_session_data* sd, int id, int type) */ int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, unsigned short* item_list) { - int i, j, amount, new_, w, vt, cost[2] = { 0, 0 }; + int i, j, amount, new_, w, vt; unsigned short nameid; struct npc_data *nd = (struct npc_data *)map_id2bl(sd->npc_shopid); + enum e_CASHSHOP_ACK res; if( !nd || ( nd->subtype != NPCTYPE_CASHSHOP && nd->subtype != NPCTYPE_ITEMSHOP && nd->subtype != NPCTYPE_POINTSHOP ) ) return ERROR_TYPE_NPC; @@ -1429,51 +1487,8 @@ int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, uns return ERROR_TYPE_INVENTORY_WEIGHT; if( points > vt ) points = vt; - // Payment Process ---------------------------------------------------- - npc_shop_currency_type(sd, nd, cost, false); - - switch(nd->subtype) { - case NPCTYPE_CASHSHOP: - if (cost[1] < points || cost[0] < (vt - points)) - return ERROR_TYPE_MONEY; - pc_paycash(sd, vt, points, LOG_TYPE_NPC); - break; - case NPCTYPE_ITEMSHOP: - { - struct item_data *id = itemdb_exists(nd->u.shop.itemshop_nameid); - - if (cost[0] < (vt - points)) { - char output[CHAT_SIZE_MAX]; - - memset(output, '\0', sizeof(output)); - - sprintf(output, msg_txt(sd, 712), (id) ? id->jname : "NULL", (id) ? id->nameid : 0); // You do not have enough %s (%hu). - clif_colormes(sd->fd, color_table[COLOR_RED], output); - return ERROR_TYPE_PURCHASE_FAIL; - } - if (id) - pc_delitem(sd, pc_search_inventory(sd, nd->u.shop.itemshop_nameid), vt - points, 0, 0, LOG_TYPE_NPC); - else - ShowWarning("Failed to delete item %hu from itemshop NPC '%s' (%s, %d, %d)!\n", nd->u.shop.itemshop_nameid, nd->exname, map[nd->bl.m].name, nd->bl.x, nd->bl.y); - } - break; - case NPCTYPE_POINTSHOP: - { - char output[CHAT_SIZE_MAX]; - - memset(output, '\0', sizeof(output)); - - if (cost[0] < (vt - points)) { - sprintf(output, msg_txt(sd, 713), nd->u.shop.pointshop_str); // You do not have enough '%s'. - clif_colormes(sd->fd, color_table[COLOR_RED], output); - return ERROR_TYPE_PURCHASE_FAIL; - } - pc_setreg2(sd, nd->u.shop.pointshop_str, cost[0] - (vt - points)); - sprintf(output, msg_txt(sd, 716), nd->u.shop.pointshop_str, cost[0] - (vt - points)); // Your '%s' is now: %d - clif_disp_onlyself(sd, output, strlen(output) + 1); - } - break; - } + if ((res = npc_cashshop_process_payment(nd, vt, points, sd)) != ERROR_TYPE_NONE) + return res; // Delivery Process ---------------------------------------------------- for( i = 0; i < count; i++ ) { @@ -1573,6 +1588,7 @@ int npc_cashshop_buy(struct map_session_data *sd, unsigned short nameid, int amo struct npc_data *nd = (struct npc_data *)map_id2bl(sd->npc_shopid); struct item_data *item; int i, price, w; + enum e_CASHSHOP_ACK res; if( amount <= 0 ) return ERROR_TYPE_ITEM_ID; @@ -1580,7 +1596,7 @@ int npc_cashshop_buy(struct map_session_data *sd, unsigned short nameid, int amo if( points < 0 ) return ERROR_TYPE_MONEY; - if( !nd || nd->subtype != NPCTYPE_CASHSHOP ) + if( !nd || (nd->subtype != NPCTYPE_CASHSHOP && nd->subtype != NPCTYPE_ITEMSHOP && nd->subtype != NPCTYPE_POINTSHOP) ) return ERROR_TYPE_NPC; if( sd->state.trading ) @@ -1630,10 +1646,8 @@ int npc_cashshop_buy(struct map_session_data *sd, unsigned short nameid, int amo if( points > price ) points = price; - if( (sd->kafraPoints < points) || (sd->cashPoints < price - points) ) - return ERROR_TYPE_MONEY; - - pc_paycash(sd, price, points, LOG_TYPE_NPC); + if ((res = npc_cashshop_process_payment(nd, price, points, sd)) != ERROR_TYPE_NONE) + return res; if( !pet_create_egg(sd, nameid) ) { struct item item_tmp; From 0b68035248acbe919aae2999c9020bea9e2c5010 Mon Sep 17 00:00:00 2001 From: Aleos <aleos89@users.noreply.github.com> Date: Sat, 5 Nov 2016 09:56:28 -0400 Subject: [PATCH 52/67] Cleaned up instance parsing checks (#1610) * Cleaned up instance parsing checks (fixes #1606) * Changed atoi to strtol. * Added data validation checks. * References to #1609. --- src/map/instance.c | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/src/map/instance.c b/src/map/instance.c index b9bee68fca..9b7d3dbe6a 100644 --- a/src/map/instance.c +++ b/src/map/instance.c @@ -816,17 +816,18 @@ static bool instance_db_free_sub(struct instance_db *db); static bool instance_readdb_sub(char* str[], int columns, int current) { uint8 i; - int id = atoi(str[0]); + char *ptr; + int id = strtol(str[0], &ptr, 10); struct instance_db *db; bool isNew = false; - if (!id || id > USHRT_MAX) { - ShowError("instance_readdb_sub: Cannot add instance with ID '%d'. Valid ID is 1 ~ %d.\n", id, USHRT_MAX); + if (!id || id > USHRT_MAX || *ptr) { + ShowError("instance_readdb_sub: Cannot add instance with ID '%d'. Valid IDs are 1 ~ %d, skipping...\n", id, USHRT_MAX); return false; } if (mapindex_name2id(str[4]) == 0) { - ShowError("instance_readdb_sub: Invalid map '%s' as entrance map.\n", str[4]); + ShowError("instance_readdb_sub: Invalid map '%s' as entrance map, skipping...\n", str[4]); return false; } @@ -836,8 +837,7 @@ static bool instance_readdb_sub(char* str[], int columns, int current) db->name = StringBuf_Malloc(); db->enter.mapname = StringBuf_Malloc(); isNew = true; - } - else { + } else { StringBuf_Clear(db->name); StringBuf_Clear(db->enter.mapname); if (db->maplist_count) { @@ -849,11 +849,36 @@ static bool instance_readdb_sub(char* str[], int columns, int current) } StringBuf_AppendStr(db->name, str[1]); - db->limit = atoi(str[2]); - db->timeout = atoi(str[3]); + + db->limit = strtol(str[2], &ptr, 10); + if (*ptr) { + ShowError("instance_readdb_sub: TimeLimit must be an integer value for instance '%d', skipping...\n", id); + instance_db_free_sub(db); + return false; + } + + db->timeout = strtol(str[3], &ptr, 10); + if (*ptr) { + ShowError("instance_readdb_sub: IdleTimeOut must be an integer value for instance '%d', skipping...\n", id); + instance_db_free_sub(db); + return false; + } + StringBuf_AppendStr(db->enter.mapname, str[4]); - db->enter.x = atoi(str[5]); - db->enter.y = atoi(str[6]); + + db->enter.x = (short)strtol(str[5], &ptr, 10); + if (*ptr) { + ShowError("instance_readdb_sub: EnterX must be an integer value for instance '%d', skipping...\n", id); + instance_db_free_sub(db); + return false; + } + + db->enter.y = (short)strtol(str[6], &ptr, 10); + if (*ptr) { + ShowError("instance_readdb_sub: EnterY must be an integer value for instance '%d', skipping...\n", id); + instance_db_free_sub(db); + return false; + } //Instance maps for (i = 7; i < columns; i++) { From 8c3562a04560d9267f0a8b01d5caf0271b588883 Mon Sep 17 00:00:00 2001 From: Sean Allen <cairoliyu@gmail.com> Date: Sun, 6 Nov 2016 13:10:50 +0800 Subject: [PATCH 53/67] Fixed 3D_Glasses item script. (#1694) * 3D_Glasses's item script Class=Job_Star_Gladiator2 is wrong, Changed to `Class==Job_Star_Gladiator2` --- db/re/item_db.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 8658c738ca..72d2eb7ac1 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -3905,7 +3905,7 @@ 5785,Green_Bunny_Hairband,Green Bunny Hairband,4,20,,200,,0,,0,0xFFFFFFFF,63,2,256,,1,1,664,{ bonus bStr,2; bonus bInt,1; bonus bDex,1; },{},{} 5786,Ancient_Elven_Ear,Ancient Elven Ear,4,10,,200,,1,,0,0xFFFFFFFF,63,2,512,,1,0,665,{ bonus bLuk,1; bonus bMaxHP,100; bonus bMaxSP,30; },{},{} 5787,Tha_Maero_Mask,Tha Maero Mask,4,20,,100,,0,,0,0xFFFFFFFF,63,2,513,,30,0,666,{ bonus bMdef,2; },{},{} -5788,3D_Glasses,3D Glasses,4,20,,100,,1,,0,0xFFFFFFFF,63,2,512,,1,0,661,{ .@eac = eaclass()&EAJ_BASEMASK; if((.@eac==EAJ_SWORDMAN) || (.@eac==EAJ_MERCHANT) || (.@eac==EAJ_ARCHER) || (.@eac==EAJ_GUNSLINGER)) bonus bAtkRate,3; if((Class==Job_Soul_Linker) || (.@eac==EAJ_MAGE) || (.@eac==EAJ_NINJA)) bonus bMatkRate,3; if(.@eac==EAJ_THIEF) bonus bFleeRate,3; if((.@eac==EAJ_NOVICE) || (.@eac==EAJ_TAEKWON) || (Class==Job_Star_Gladiator) || (Class=Job_Star_Gladiator2)) bonus bMaxHPrate,3; bonus bMaxSPrate,3; },{},{} +5788,3D_Glasses,3D Glasses,4,20,,100,,1,,0,0xFFFFFFFF,63,2,512,,1,0,661,{ .@eac = eaclass()&EAJ_BASEMASK; if((.@eac==EAJ_SWORDMAN) || (.@eac==EAJ_MERCHANT) || (.@eac==EAJ_ARCHER) || (.@eac==EAJ_GUNSLINGER)) bonus bAtkRate,3; if((Class==Job_Soul_Linker) || (.@eac==EAJ_MAGE) || (.@eac==EAJ_NINJA)) bonus bMatkRate,3; if(.@eac==EAJ_THIEF) bonus bFleeRate,3; if((.@eac==EAJ_NOVICE) || (.@eac==EAJ_TAEKWON) || (Class==Job_Star_Gladiator) || (Class==Job_Star_Gladiator2)) bonus bMaxHPrate,3; bonus bMaxSPrate,3; },{},{} 5789,Thanatos_Mal_Mask,Thanatos Mal Mask,4,20,,100,,3,,0,0xFFFFFFFF,63,2,513,,30,0,667,{ bonus bVit,1; },{},{} 5790,Holy_Mom_Love,TM,4,20,,500,,0,,1,0xFFFFFFFF,63,2,768,,45,1,610,{ bonus2 bSubRace,RC_Demon,-5; bonus2 bSubRace,RC_Undead,-5; bonus3 bAutoSpell,"MG_COLDBOLT",1,20; },{},{} 5791,Tenkaippin_Ramen,Tenkaippin Ramen,4,20,,500,,1,,0,0xFFFFFFFF,63,2,256,,30,0,668,{ bonus bInt,-1; bonus bDex,4; },{},{} From d0ce53e3128cc308aedf37577a4fd0f5b4c7915e Mon Sep 17 00:00:00 2001 From: rAthenaAPI <administrator@rathena.org> Date: Sun, 6 Nov 2016 06:10:56 +0100 Subject: [PATCH 54/67] SQL synchronization --- sql-files/item_db_re.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index a51080904e..06761703b2 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -3937,7 +3937,7 @@ REPLACE INTO `item_db_re` VALUES (5784,'PinkBunny_Hairband','PinkBunny Hairband' REPLACE INTO `item_db_re` VALUES (5785,'Green_Bunny_Hairband','Green Bunny Hairband',4,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',1,664,'bonus bStr,2; bonus bInt,1; bonus bDex,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (5786,'Ancient_Elven_Ear','Ancient Elven Ear',4,10,NULL,200,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,665,'bonus bLuk,1; bonus bMaxHP,100; bonus bMaxSP,30;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (5787,'Tha_Maero_Mask','Tha Maero Mask',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,513,NULL,'30',0,666,'bonus bMdef,2;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (5788,'3D_Glasses','3D Glasses',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,661,'.@eac = eaclass()&EAJ_BASEMASK; if((.@eac==EAJ_SWORDMAN) || (.@eac==EAJ_MERCHANT) || (.@eac==EAJ_ARCHER) || (.@eac==EAJ_GUNSLINGER)) bonus bAtkRate,3; if((Class==Job_Soul_Linker) || (.@eac==EAJ_MAGE) || (.@eac==EAJ_NINJA)) bonus bMatkRate,3; if(.@eac==EAJ_THIEF) bonus bFleeRate,3; if((.@eac==EAJ_NOVICE) || (.@eac==EAJ_TAEKWON) || (Class==Job_Star_Gladiator) || (Class=Job_Star_Gladiator2)) bonus bMaxHPrate,3; bonus bMaxSPrate,3;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (5788,'3D_Glasses','3D Glasses',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'1',0,661,'.@eac = eaclass()&EAJ_BASEMASK; if((.@eac==EAJ_SWORDMAN) || (.@eac==EAJ_MERCHANT) || (.@eac==EAJ_ARCHER) || (.@eac==EAJ_GUNSLINGER)) bonus bAtkRate,3; if((Class==Job_Soul_Linker) || (.@eac==EAJ_MAGE) || (.@eac==EAJ_NINJA)) bonus bMatkRate,3; if(.@eac==EAJ_THIEF) bonus bFleeRate,3; if((.@eac==EAJ_NOVICE) || (.@eac==EAJ_TAEKWON) || (Class==Job_Star_Gladiator) || (Class==Job_Star_Gladiator2)) bonus bMaxHPrate,3; bonus bMaxSPrate,3;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (5789,'Thanatos_Mal_Mask','Thanatos Mal Mask',4,20,NULL,100,NULL,3,NULL,0,0xFFFFFFFF,63,2,513,NULL,'30',0,667,'bonus bVit,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (5790,'Holy_Mom_Love','TM',4,20,NULL,500,NULL,0,NULL,1,0xFFFFFFFF,63,2,768,NULL,'45',1,610,'bonus2 bSubRace,RC_Demon,-5; bonus2 bSubRace,RC_Undead,-5; bonus3 bAutoSpell,"MG_COLDBOLT",1,20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (5791,'Tenkaippin_Ramen','Tenkaippin Ramen',4,20,NULL,500,NULL,1,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',0,668,'bonus bInt,-1; bonus bDex,4;',NULL,NULL); From 78d9e2a245f245ce800f37b6f2ebfda1c5ef84b7 Mon Sep 17 00:00:00 2001 From: Playtester <Kenji.Ito@gmx.de> Date: Sun, 6 Nov 2016 11:17:14 +0100 Subject: [PATCH 55/67] Slave aggro (fixes #1676) - Slaves will now become aggressive when their master starts chasing a target to attack it --- src/map/mob.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/map/mob.c b/src/map/mob.c index 76eee531ad..13aed85c4f 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1344,7 +1344,9 @@ static int mob_ai_sub_hard_slavemob(struct mob_data *md,unsigned int tick) if (ud) { struct block_list *tbl=NULL; if (ud->target && ud->state.attack_continue) - tbl=map_id2bl(ud->target); + tbl = map_id2bl(ud->target); + else if (ud->target_to && ud->state.attack_continue) + tbl = map_id2bl(ud->target_to); else if (ud->skilltarget) { tbl = map_id2bl(ud->skilltarget); //Required check as skilltarget is not always an enemy. [Skotlex] From cbc365d0f2f02ebceece4b6de7d58c8fe487f88f Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Sun, 6 Nov 2016 14:14:42 -0500 Subject: [PATCH 56/67] Corrected autospell bonuses (fixes #1593) * Resolves the range check when the config is enabled not checking the proper distance between the two targets. * Updated the item bonus documentation. Thanks to @chriser-! --- doc/item_bonus.txt | 3 ++- src/map/skill.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 24b4adf5a5..bdc6067226 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -329,7 +329,8 @@ bonus2 bWeaponComaRace,r,n; Adds a n/100% chance to cause Coma when attacking | 5. AutoSpell Bonuses | ======================== NOTES: - - For all AutoSpell bonuses, target must be within the spell's range to go off. + - For all AutoSpell bonuses, target does not have be within the spell's range to go off. + -- Enable conf/battle/battle.conf::autospell_check_range to force a range check. - By default, AutoSpell skills are casted on target unless it is a self or support skill (inf = 4/16). bonus3 bAutoSpell,sk,y,n; Adds a n/10% chance to cast skill sk of level y when attacking diff --git a/src/map/skill.c b/src/map/skill.c index 9a3481988d..cf6cc57670 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2043,7 +2043,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 } } if (battle_config.autospell_check_range && - !battle_check_range(src, tbl, skill_get_range2(src, skill, autospl_skill_lv, true))) + !battle_check_range(bl, tbl, skill_get_range2(src, skill, autospl_skill_lv, true))) continue; if (skill == AS_SONICBLOW) @@ -2172,7 +2172,7 @@ int skill_onskillusage(struct map_session_data *sd, struct block_list *bl, uint1 } } if (battle_config.autospell_check_range && - !battle_check_range(&sd->bl, tbl, skill_get_range2(&sd->bl, skill, skill_lv, true))) + !battle_check_range(bl, tbl, skill_get_range2(&sd->bl, skill, skill_lv, true))) continue; sd->state.autocast = 1; @@ -2383,7 +2383,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * } } - if (!battle_check_range(src, tbl, skill_get_range2(src, autospl_skill_id, autospl_skill_lv, true)) && battle_config.autospell_check_range) + if (!battle_check_range(bl, tbl, skill_get_range2(src, autospl_skill_id, autospl_skill_lv, true)) && battle_config.autospell_check_range) continue; dstsd->state.autocast = 1; From 45d9674d2b65f61a9227126d6ee49609f1b36d0d Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Mon, 7 Nov 2016 14:39:43 -0500 Subject: [PATCH 57/67] Resolved rental timer display (fixes #1542) * Resolves the timer display overflowing when an item is rented for a long duration. Thanks to @mrjnumber1! --- src/map/pc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/map/pc.c b/src/map/pc.c index ef43cfd97b..f561f7d71a 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -512,7 +512,7 @@ void pc_inventory_rental_clear(struct map_session_data *sd) void pc_inventory_rentals(struct map_session_data *sd) { int i, c = 0; - unsigned int expire_tick, next_tick = UINT_MAX; + unsigned int next_tick = UINT_MAX; for( i = 0; i < MAX_INVENTORY; i++ ) { // Check for Rentals on Inventory if( sd->status.inventory[i].nameid == 0 ) @@ -525,8 +525,9 @@ void pc_inventory_rentals(struct map_session_data *sd) clif_rental_expired(sd->fd, i, sd->status.inventory[i].nameid); pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_OTHER); } else { - expire_tick = (unsigned int)(sd->status.inventory[i].expire_time - time(NULL)) * 1000; - clif_rental_time(sd->fd, sd->status.inventory[i].nameid, (int)(expire_tick / 1000)); + unsigned int expire_tick = (unsigned int)(sd->status.inventory[i].expire_time - time(NULL)); + + clif_rental_time(sd->fd, sd->status.inventory[i].nameid, (int)expire_tick); next_tick = umin(expire_tick, next_tick); c++; } From c8d37c44481d935a676053aa37438853222d3d9f Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Mon, 7 Nov 2016 15:08:49 -0500 Subject: [PATCH 58/67] Removed Frigg's Song from Group A Songs (fixes #1583) * Song can now overlap with Group A and B Songs. * Song was removed from group in Hero's Trail III patch. --- src/map/status.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/map/status.c b/src/map/status.c index b65da65c90..1e6b20a158 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8691,15 +8691,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_MOONLITSERENADE: case SC_RUSHWINDMILL: case SC_ECHOSONG: - case SC_HARMONIZE: - case SC_FRIGG_SONG: // Group A doesn't overlap + case SC_HARMONIZE: // Group A doesn't overlap if (type != SC_SWINGDANCE) status_change_end(bl, SC_SWINGDANCE, INVALID_TIMER); if (type != SC_SYMPHONYOFLOVER) status_change_end(bl, SC_SYMPHONYOFLOVER, INVALID_TIMER); if (type != SC_MOONLITSERENADE) status_change_end(bl, SC_MOONLITSERENADE, INVALID_TIMER); if (type != SC_RUSHWINDMILL) status_change_end(bl, SC_RUSHWINDMILL, INVALID_TIMER); if (type != SC_ECHOSONG) status_change_end(bl, SC_ECHOSONG, INVALID_TIMER); if (type != SC_HARMONIZE) status_change_end(bl, SC_HARMONIZE, INVALID_TIMER); - if (type != SC_FRIGG_SONG) status_change_end(bl, SC_FRIGG_SONG, INVALID_TIMER); break; case SC_VOICEOFSIREN: case SC_DEEPSLEEP: From e21b39230a723f03bdb1b85f72edec981242e7f8 Mon Sep 17 00:00:00 2001 From: CairoLee <cairoliyu@gmail.com> Date: Mon, 7 Nov 2016 22:37:43 +0800 Subject: [PATCH 59/67] Clear unused battle configure "disp_serverbank_msg" --- conf/battle/misc.conf | 1 - src/map/battle.c | 1 - src/map/battle.h | 1 - 3 files changed, 3 deletions(-) diff --git a/conf/battle/misc.conf b/conf/battle/misc.conf index 061de2a412..f12b286839 100644 --- a/conf/battle/misc.conf +++ b/conf/battle/misc.conf @@ -146,7 +146,6 @@ mon_trans_disable_in_gvg: no discount_item_point_shop: 0 // Don't display message "login-serv has been asked to %s the player '%.*s'." (Note 1) -disp_serverbank_msg: no disp_servervip_msg: no // Delay to allow user resend new mail (default & minimum is 1000) diff --git a/src/map/battle.c b/src/map/battle.c index bf523bfbc6..68494f3ef3 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -8293,7 +8293,6 @@ static const struct _battle_data { { "feature.autotrade_head_direction", &battle_config.feature_autotrade_head_direction,0, -1, 2, }, { "feature.autotrade_sit", &battle_config.feature_autotrade_sit, 1, -1, 1, }, { "feature.autotrade_open_delay", &battle_config.feature_autotrade_open_delay, 5000, 1000, INT_MAX, }, - { "disp_serverbank_msg", &battle_config.disp_serverbank_msg, 0, 0, 1, }, { "disp_servervip_msg", &battle_config.disp_servervip_msg, 0, 0, 1, }, { "warg_can_falcon", &battle_config.warg_can_falcon, 0, 0, 1, }, { "path_blown_halt", &battle_config.path_blown_halt, 1, 0, 1, }, diff --git a/src/map/battle.h b/src/map/battle.h index 687d695068..2a5a9b794f 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -565,7 +565,6 @@ extern struct Battle_Config int fame_pharmacy_7; int fame_pharmacy_10; - int disp_serverbank_msg; int disp_servervip_msg; int warg_can_falcon; int path_blown_halt; From 9a009bf316a9b0caf1b0f3f5802981d5166d9f97 Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Mon, 7 Nov 2016 16:45:59 -0500 Subject: [PATCH 60/67] Corrected Spiritual Sphere Absorption and Cursed Circle interaction (fixes #1514) * Spiritual Sphere Absorption will fail to go through if the caster is captured in Cursed Circle. --- src/map/status.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/map/status.c b/src/map/status.c index 1e6b20a158..541f73bce6 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2034,6 +2034,9 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui return false; } + if (flag == 1 && sc->data[SC_CURSEDCIRCLE_TARGET] && skill_id == MO_ABSORBSPIRITS) // Absorb Spirits fails to go through + return false; + if (skill_id != RK_REFRESH && sc->opt1 && !(sc->opt1 == OPT1_CRYSTALIZE && src->type == BL_MOB) && sc->opt1 != OPT1_BURNING && skill_id != SR_GENTLETOUCH_CURE) { // Stuned/Frozen/etc if (flag != 1) // Can't cast, casted stuff can't damage. return false; From 623d845717282a65500a7f5ba3e8786ffd490bee Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Tue, 8 Nov 2016 11:07:08 -0500 Subject: [PATCH 61/67] Fixed IgnoreDefClassRate check (fixes #1702) * The item bonus will now properly check for a valid Class rather than a valid Race. * Added IgnoreDefRaceRate and IgnoreDefClassRate to the item_bonus documentation. Thanks to @Tokeiburu! --- doc/item_bonus.txt | 2 ++ src/map/pc.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 24b4adf5a5..d9287e5f08 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -276,9 +276,11 @@ bonus bIgnoreDefRace,r; Disregard DEF against enemies of race r bonus2 bIgnoreDefRaceRate,r,n; Disregard n% of the target's DEF if the target belongs to race r bonus bIgnoreDefClass,c; Disregard DEF against enemies of class c bonus bIgnoreMDefRace,r; Disregard MDEF against enemies of race r +bonus2 bIgnoreDefRaceRate,r,n; Disregard n% of the target's DEF if the target belongs to race r bonus2 bIgnoreMdefRaceRate,r,n; Disregard n% of the target's MDEF if the target belongs to race r bonus2 bIgnoreMdefRace2Rate,mr,n; Disregard n% of the target's MDEF if the target belongs to monster race mr bonus bIgnoreMDefEle,e; Disregard MDEF against enemies of element e +bonus2 bIgnoreDefClassRate,c,n; Disregard n% of the target's DEF if the target belongs to class c bonus2 bIgnoreMdefClassRate,c,n; Disregard n% of the target's MDEF if the target belongs to class c Experience diff --git a/src/map/pc.c b/src/map/pc.c index ef43cfd97b..fbc86fdce8 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -3553,7 +3553,7 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val) sd->ignore_def_by_race[type2] += val; break; case SP_IGNORE_DEF_CLASS_RATE: // bonus2 bIgnoreDefClassRate,r,n; - PC_BONUS_CHK_RACE(type2, SP_IGNORE_DEF_CLASS_RATE); + PC_BONUS_CHK_CLASS(type2, SP_IGNORE_DEF_CLASS_RATE); if (sd->state.lr_flag != 2) sd->ignore_def_by_class[type2] += val; break; From 74a703d64982df7b1922448e5a4d13f1de6c3d3a Mon Sep 17 00:00:00 2001 From: aleos89 <aleos89@users.noreply.github.com> Date: Wed, 9 Nov 2016 09:36:10 -0500 Subject: [PATCH 62/67] Corrected Anodyne usage on no teleport maps (fixes #1704) * Added a missing break. --- src/map/pc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/map/pc.c b/src/map/pc.c index 0cedf3530d..88648e7190 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4764,6 +4764,7 @@ bool pc_isUseitem(struct map_session_data *sd,int n) case ITEMID_ANODYNE: if( map_flag_gvg(sd->bl.m) ) return false; + break; case ITEMID_WING_OF_FLY: case ITEMID_GIANT_FLY_WING: if( map[sd->bl.m].flag.noteleport || map_flag_gvg(sd->bl.m) ) { From 46872477699e1cd80d761d84329618642d039240 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Thu, 10 Nov 2016 00:12:26 +0100 Subject: [PATCH 63/67] Fixed a possible null pointer Follow up to e93c888 See https://rathena.org/board/topic/108045-map-server-crash-after-using-skill-manhole/ --- src/map/status.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/status.c b/src/map/status.c index 541f73bce6..f18235e481 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2012,7 +2012,7 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui break; case SC_MANHOLE: // Skill is disabled against special racial grouped monsters(GvG and Battleground) - if (status_get_race2(target) == RC2_GVG || status_get_race2(target) == RC2_BATTLEFIELD) + if (target && ( status_get_race2(target) == RC2_GVG || status_get_race2(target) == RC2_BATTLEFIELD ) ) return false; default: break; From a03105b49d96a44df603e33a090a04ddae657391 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Thu, 10 Nov 2016 00:18:16 +0100 Subject: [PATCH 64/67] Fixed a potential map-server crash Fixes #1398 --- src/map/clif.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index 62c2cd83ff..140a75e5dc 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -16900,11 +16900,11 @@ void clif_buyingstore_myitemlist(struct map_session_data* sd) /// 0814 <account id>.L <store name>.80B void clif_buyingstore_entry(struct map_session_data* sd) { - uint8 buf[86]; + uint8 buf[MESSAGE_SIZE+6]; WBUFW(buf,0) = 0x814; WBUFL(buf,2) = sd->bl.id; - memcpy(WBUFP(buf,6), sd->message, MESSAGE_SIZE); + safestrncpy(WBUFCP(buf,6), sd->message, MESSAGE_SIZE); clif_send(buf, packet_len(0x814), &sd->bl, AREA_WOS); } @@ -16915,7 +16915,7 @@ void clif_buyingstore_entry_single(struct map_session_data* sd, struct map_sessi WFIFOHEAD(fd,packet_len(0x814)); WFIFOW(fd,0) = 0x814; WFIFOL(fd,2) = pl_sd->bl.id; - memcpy(WFIFOP(fd,6), pl_sd->message, MESSAGE_SIZE); + safestrncpy(WFIFOCP(fd,6), pl_sd->message, MESSAGE_SIZE); WFIFOSET(fd,packet_len(0x814)); } From 61ce61c7a054a64c92f84201fd244d25edab4790 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 <lemongrass@kstp.at> Date: Thu, 10 Nov 2016 09:00:00 +0100 Subject: [PATCH 65/67] Updated wiki references in README --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8308415dea..799ea0caf2 100644 --- a/README.md +++ b/README.md @@ -151,10 +151,10 @@ Examples: * https://github.com/rathena/rathena * Full Installation Instructions - * Windows: https://rathena.org/wiki/Installation_on_Windows - * CentOS: https://rathena.org/wiki/Installation_(CentOS) - * Debian: https://rathena.org/wiki/Installation_(Debian) - * FreeBSD: https://rathena.org/wiki/Installation_(FreeBSD) + * [Windows](https://github.com/rathena/rathena/wiki/Install-on-Windows) + * [CentOS](https://github.com/rathena/rathena/wiki/Install-on-Centos) + * [Debian](https://github.com/rathena/rathena/wiki/Install-on-Debian) + * [FreeBSD](https://github.com/rathena/rathena/wiki/Install-on-Centos) * rAthena IRC Channel * irc://irc.rizon.net/rathena @@ -164,7 +164,7 @@ Examples: http://discord.rathena.org * rAthena Wiki - https://rathena.org/board/index.php?app=ipbwiki + https://github.com/rathena/rathena/wiki * Fork and Pull Request Q&A https://rathena.org/board/topic/86913-pull-request-qa/ From c7a9dd8b259e06c393da72c1bd0a9ab92ce74171 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh <cydh@pservero.com> Date: Fri, 11 Nov 2016 11:40:44 +0700 Subject: [PATCH 66/67] Corrected job for Crimson Weapons, Infinity Weapons, and a Spoon! Signed-off-by: Cydh Ramdh <cydh@pservero.com> --- db/re/item_db.txt | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 72d2eb7ac1..930adbe1db 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -784,7 +784,7 @@ 1440,Battle_Hook_,Battle Hook,5,20,,900,140,,3,3,0x00004082,18,2,2,4,65,1,4,{ bonus2 bAddEff,Eff_Stun,500; bonus2 bAddRace,RC_DemiHuman,20; bonus2 bAddRace,RC_Player,20; skill "KN_PIERCE",3; },{},{} 1441,Blue_Spear,Blue Spear,5,10,,1200,180:170,,3,1,0x00004000,56,2,2,3,100,1,4,{ bonus bDex,5; bonus bInt,5; },{},{} 1442,Ru_Gold_Spear,Ru Gold Spear,5,0,,1200,180,,3,2,0x00004000,56,2,2,3,120,1,4,{ bonus bStr,8; bonus bAgi,8; },{},{} -1443,Crimson_Spear,Crimson Spear,5,20,,900,90,,3,2,0x00000002,56,2,2,3,70,1,4,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} +1443,Crimson_Spear,Crimson Spear,5,20,,900,90,,3,2,0x00004082,56,2,2,3,70,1,4,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 1446,Requiem_Spear,Requiem Spear,5,20,,1000,130,,3,,0x00004080,63,2,2,4,100,1,4,{ .@r = getrefine(); .@b = 40; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+20; } bonus2 bAddRace2,RC2_BioLab,.@b; },{},{} //=================================================================== // 2-Handed Spears @@ -843,7 +843,7 @@ 1495,TE_Woe_Lance,TE Woe Lance,5,0,,0,150,,3,0,0x00004082,63,2,34,3,40,1,5,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Blind,3000; },{},{} 1496,Tanos_Two-Handed_Spear,Tanos Two-Handed Spear,5,10,,3750,250:50,,,1,0x00004082,63,2,34,4,120,1,5,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bAtkRate,5; bonus2 bHPLossRate,100,10000; },{},{} 1497,Hell_Fire_,Hellfire,5,20,,3500,200,,3,3,0x00004082,63,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Fire; bonus3 bAutoSpell,"MG_FIREBALL",5,100; bonus bStr,3; },{},{} -1498,Crimson_Lance,Crimson Lance,5,20,,1750,175,,1,2,0x00000002,63,2,34,3,70,1,5,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} +1498,Crimson_Lance,Crimson Lance,5,20,,1750,175,,1,2,0x00004082,63,2,34,3,70,1,5,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 1499,Requiem_Lance,Requiem Lance,5,20,,1500,220,,3,,0x00004080,63,2,34,4,100,1,5,{ .@r = getrefine(); .@b = 40; .@c = 5; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+30; .@c += (.@r-5); } bonus2 bAddRace2,RC2_BioLab,.@b; bonus2 bSubRace2,RC2_BioLab,.@c; },{},{} //=================================================================== // Maces @@ -1028,7 +1028,7 @@ 1677,Blue_Wand,Blue Wand,5,10,,0,50,,1,1,0x00000200,56,2,2,3,100,1,10,{ bonus bStr,5; bonus bInt,5; },{},{} 1678,Ru_Gold_Wand,Ru Gold Wand,5,0,,0,50,,1,2,0x00000200,56,2,2,3,120,1,10,{ bonus bDex,8; bonus bInt,8; },{},{} 1679,Rafini_Staff_,Laphine Staff,5,20,,500,30:180,,1,2,0x00818315,63,2,2,3,100,1,10,{ bonus bFixedCastRate,-getrefine(); },{},{} -1680,Crimson_One-Handed_Staff,Crimson One-Handed Staff,5,10,,600,60:70,,1,2,0x00800015,63,2,2,3,70,1,10,{ .@r = getrefine(); bonus bInt,4; bonus bMatk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1; },{},{} +1680,Crimson_One-Handed_Staff,Crimson One-Handed Staff,5,10,,600,60:70,,1,2,0x00818315,63,2,2,3,70,1,10,{ .@r = getrefine(); bonus bInt,4; bonus bMatk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1; },{},{} 1681,Short_Foxtail_Staff,Short Foxtail Staff,5,20,,0,30,,1,0,0x80000000,7,2,2,1,1,1,10,{},{},{} 1682,Shadow_Staff,Shadow Staff,5,0,,600,70:130,,1,2,0x00000200,56,2,2,4,90,1,10,{ .@r = getrefine(); bonus2 bSkillAtk,"WL_HELLINFERNO",(getskilllv("WL_HELLINFERNO") >= 5 ? 100 : 0) + (.@r*10); bonus2 bIgnoreMdefRaceRate,RC_All,5; autobonus "{ bonus2 bVariableCastrate,\"WL_HELLINFERNO\",-30; }",.@r*20,5000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER }"; },{},{} 1683,Enriched_Foxtail_Staff,Enriched Foxtail Staff,5,20,,200,50:70,,1,1,0x80000000,7,2,2,2,12,1,10,{ bonus bMaxSP,50; },{},{} @@ -1212,7 +1212,7 @@ 1935,Ozs_New_Ukulele,Oz's New Ukulele,5,20,,2000,160,,1,2,0x00080000,63,1,2,4,130,1,13,{ bonus2 bSkillUseSP,"MI_RUSH_WINDMILL",-20; },{},{} 1936,Blue_Violin,Blue Violin,5,10,,1500,180,,2,1,0x00080000,63,1,2,3,100,1,13,{ bonus bDex,5; bonus bVit,5; },{},{} 1937,Ru_Gold_Violin,Ru Gold Violin,5,0,,1500,180,,1,2,0x00080000,56,2,2,3,120,1,13,{ bonus bDex,8; bonus bVit,8; },{},{} -1938,Infinity_Violin,Infinity Violin,5,10,,500,150,,2,1,0x00080000,63,1,2,4,100,1,13,{},{},{} +1938,Infinity_Violin,Infinity Violin,5,10,,500,150,,2,1,0x00080000,56,1,2,4,100,1,13,{},{},{} 1939,Crimson_Violin,Crimson Violin,5,20,,800,80,,2,2,0x00080000,63,1,2,3,70,1,13,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 1940,Trumpet_Shell,Trumpet Shell,5,0,,600,125,,1,1,0x00080000,56,1,2,4,130,1,13,{ .@r = getrefine(); bonus bDex,.@r; bonus bInt,.@r; .@per = ((.@r > 9) ? 40 : ((.@r > 7) ? 20 : ((.@r > 5) ? 10 : 0))); bonus2 bSkillAtk,"WM_REVERBERATION",.@per; bonus2 bVariableCastrate,"WM_REVERBERATION",-.@per; },{},{} 1942,Requiem_Violin,Requiem Violin,5,20,,500,160:120,,1,,0x00080000,63,1,2,4,100,1,13,{ .@r = getrefine(); .@b = 40; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+20; } if(.@r>=7) bonus2 bSkillAtk,"CG_ARROWVULCAN",200; bonus2 bAddRace2,RC2_BioLab,.@b; },{},{} @@ -1262,7 +1262,7 @@ 1990,Bloody_Floral_Decoration_Microphone,Bloody Floral Decoration Microphone,5,20,,1000,160,,2,2,0x00080000,63,0,2,4,130,1,14,{ bonus2 bSkillUseSP,"CG_MOONLIT",-20; },{},{} 1991,Blue_Whip,Blue Whip,5,10,,1500,180,,2,1,0x00080000,63,0,2,3,100,1,14,{ bonus bDex,5; bonus bVit,5; },{},{} 1992,Ru_Gold_Whip,Ru Gold Whip,5,0,,1500,180,,2,2,0x00080000,56,2,2,3,120,1,14,{ bonus bDex,8; bonus bVit,8; },{},{} -1994,Infinity_Whip,Infinity Whip,5,10,,500,150,,2,1,0x00080000,63,0,2,4,100,1,14,{},{},{} +1994,Infinity_Whip,Infinity Whip,5,10,,500,150,,2,1,0x00080000,56,0,2,4,100,1,14,{},{},{} 1995,Crimson_Whip,Crimson Whip,5,20,,800,80,,2,2,0x00080000,63,0,2,3,70,1,14,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 1996,Wire_of_Vicious_Mind,Wire of Vicious Mind,5,20,,1300,130:50,,2,1,0x00080000,63,,2,4,160,1,14,{ bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; },{},{} //=================================================================== @@ -1292,8 +1292,8 @@ 2021,Ganbantein,Ganbantein,5,0,,2000,100:320,,1,0,0x00000200,56,2,2,4,100,1,10,{ bonus bInt,25; bonus bDex,25; bonus3 bAddEff,Eff_Poison,1000,ATF_MAGIC; bonus3 bAutoSpell,"AB_SILENTIUM",1,100; bonus bUnbreakableWeapon,1; },{},{} 2022,Geffen_Staff,Staff of Geffen,5,20,,1000,100:300,,1,1,0x00000200,18,2,34,1,150,1,23,{ bonus bInt,20; },{},{} 2023,Tanos_Two-handed_Stick,Tanos Two-handed Stick,5,10,,1400,120:250,,,1,0x810200,63,2,34,4,120,1,23,{ bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bHealPower,18; bonus2 bHPLossRate,100,10000; },{},{} -2024,Infinity_Two-handed_Stick,Infinity Two-handed Stick,5,10,,500,30:170,,,1,0x810200,63,2,34,4,100,1,23,{},{},{} -2025,Crimson_Two-Handed_Staff,Crimson Two-Handed Staff,5,20,,1000,100,,1,2,0x000014,63,2,34,3,70,1,23,{ .@r = getrefine(); bonus bInt,5; bonus bMatk,150+((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} +2024,Infinity_Two-handed_Stick,Infinity Two-handed Stick,5,10,,500,30:170,,,1,0x810200,56,2,34,4,100,1,23,{},{},{} +2025,Crimson_Two-Handed_Staff,Crimson Two-Handed Staff,5,20,,1000,100,,1,2,0x800200,63,2,34,3,70,1,23,{ .@r = getrefine(); bonus bInt,5; bonus bMatk,150+((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 2026,Staff_of_Vicious_Mind,Staff of Vicious Mind,5,20,,1000,100:200,,1,1,0x00810204,63,2,34,4,160,1,23,{ bonus bMatk,pow(min(getrefine(),15),2); bonus bInt,6; bonus bUnbreakableWeapon,1; },{},{} 2027,Sunflower_Kid,Sunflower Kid,5,10,,1500,150:320,,,2,0x00000200,40,2,34,4,170,1,23,{ bonus bInt,5; .@r = getrefine(); bonus bMatkRate,(.@r/2); bonus bDelayrate,(.@r*-1); bonus bUnbreakableWeapon,1; },{},{} 2032,Requiem_Wizardry_Staff,Requiem Wizardry Staff,5,20,,500,100:230,,1,,0xFFFFFFFF,63,2,2,4,100,1,10,{ .@r = getrefine(); .@b = 40; .@c = 5; if(.@r>=5){ .@b += (.@r-5)*15+20; .@c += .@r-5; } bonus2 bMagicAddRace2,RC2_BioLab,.@b; bonus2 bSubRace2,RC2_BioLab,.@c; bonus2 bIgnoreMdefRace2Rate,RC2_BioLab,(.@r-5)*10; },{},{} @@ -7241,7 +7241,7 @@ 13122,Altea_and_Ares,Altea & Ares,5,1450000,,1000,200,,9,0,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{} 13124,Altea_and_Ares_,Altea & Ares,5,1450000,,1000,200,,9,1,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{} 13125,Metal_Revolver,Metal Revolver,5,0,,0,30,,7,1,0x41000000,63,2,34,3,1,0,17,{ bonus bBaseAtk,getrefine(); bonus bLongAtkRate,1; if (BaseLevel >= 20 && BaseLevel <= 120) { bonus bBaseAtk,3*(BaseLevel/10); } },{},{} -13126,Infinity_Pistol,Infinity Pistol,5,10,,500,175,,7,1,0x41000000,63,2,34,4,100,0,17,{},{},{} +13126,Infinity_Pistol,Infinity Pistol,5,10,,500,175,,7,1,0x40000000,63,2,34,4,100,0,17,{},{},{} 13127,Crimson_Revolver,Crimson Revolver,5,20,,1000,100,,7,2,0x41000000,63,2,34,3,70,1,17,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} //=================================================================== // Guns @@ -7403,8 +7403,8 @@ 13317,TE_Woe_Huuma,TE Woe Huuma,5,0,,0,80:100,,1,0,0x22000000,63,2,2,3,40,1,22,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Bleeding,3000; },{},{} 13321,Half_BF_Huuma_Shuriken2,Half BF Huuma Shuriken,5,20,,0,55,,1,0,0x02000000,63,2,34,3,80,1,22,{ bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,40; bonus2 bAddRace,RC_Player,40; autobonus "{ bonus2 bSkillAtk,\"NJ_HUUMA\",100; bonus2 bSkillAtk,\"NJ_ISSEN\",100; }",50,10000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,1; },{},{} 13322,Huuma_Metal_Shuriken,Huuma Metal Shuriken,5,20,,0,50,,1,1,0x02000000,63,2,34,3,1,1,22,{ bonus bUnbreakableWeapon,1; .@r = getrefine(); bonus bBaseAtk,.@r*5; bonus bMatk,.@r*3; if(.@r>=2) bonus bNearAtkDef,1*.@r/2; if (BaseLevel >= 20 && BaseLevel <= 120) bonus bBaseAtk,3*.@r/10; },{},{} -13323,Infinity_Shuriken,Infinity Shuriken,5,0,,500,150:40,,1,1,0x02000000,63,2,34,4,100,1,22,{},{},{} -13327,Crimson_Huuma_Shuriken,Crimson Huuma Shuriken,5,20,,1000,100,,1,2,0x02000000,63,2,34,3,70,1,22,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225); },{},{} +13323,Infinity_Shuriken,Infinity Shuriken,5,0,,500,150:40,,1,1,0x20000000,63,2,34,4,100,1,22,{},{},{} +13327,Crimson_Huuma_Shuriken,Crimson Huuma Shuriken,5,20,,1000,100,,1,2,0x22000000,63,2,34,3,70,1,22,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225); },{},{} 13328,Huuma_Shuriken_of_Vicious_Mind,Huuma Shuriken of Vicious Mind,5,20,,1500,150:50,,1,1,0x22000000,63,2,34,4,160,1,22,{ bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; bonus bUnbreakableWeapon,1; },{},{} //=================================================================== // More 1-Handed Swords @@ -7455,7 +7455,7 @@ 13450,Saber__,Saber,5,10,,1000,115,,,2,0x000654E2,63,2,2,3,27,1,0,{},{},{} 13451,Blue_Sword,Blue Sword,5,10,,1200,190,,1,1,0x00000080,56,2,2,3,100,1,2,{ bonus bStr,5; bonus bAgi,5; },{},{} 13452,Ru_Gold_Sword,Ru Gold Sword,5,0,,1200,190,,1,2,0x00000080,56,2,2,3,120,1,2,{ bonus bStr,8; bonus bAgi,8; },{},{} -13454,Crimson_Saber,Crimson Saber,5,20,,850,85,,1,2,0x00000063,56,2,2,3,70,1,2,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} +13454,Crimson_Saber,Crimson Saber,5,20,,850,85,,1,2,0x000654E3,56,2,2,3,70,1,2,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 13455,Saber_of_Vicious_Mind,Saber of Vicious Mind,5,20,,1350,135,,1,1,0x000654E3,63,2,2,4,160,1,2,{ bonus bAtk,pow(min(getrefine(),15),2); },{},{} //=================================================================== // More Cash Shop Items @@ -8684,9 +8684,9 @@ 16035,Half_BF_Morning_Star1,Half BF Morning Star1,5,20,,0,105,,1,0,0x0004C5B3,63,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon,1; },{},{} 16036,Blue_Mace,Blue Mace,5,10,,1500,170,,1,1,0x00008000,56,2,2,3,100,1,8,{ bonus bVit,5; bonus bInt,5; },{},{} 16037,Ru_Gold_Mace,Ru Gold Mace,5,0,,1500,170,,1,2,0x00008000,56,2,2,3,120,1,8,{ bonus bVit,8; bonus bInt,8; },{},{} -16038,Infinity_Mace,Infinity Mace,5,10,,500,155,,1,1,0x00000032,40,2,2,4,100,1,8,{},{},{} -16039,Spoon,Spoon,5,10,,1000,80,,1,1,0x00000033,63,2,2,3,40,1,8,{ bonus bAspd,10; bonus2 bAddEff,Eff_Curse,1000; },{},{} -16040,Crimson_Mace,Crimson Mace,5,20,,800,80,,1,2,0x00000033,63,2,2,3,70,1,8,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} +16038,Infinity_Mace,Infinity Mace,5,10,,500,155,,1,1,0x0004C780,56,2,2,4,100,1,8,{},{},{} +16039,Spoon,Spoon,5,10,,1000,80,,1,1,0x0004C5B3,63,2,2,3,40,1,8,{ bonus bAspd,10; bonus2 bAddEff,Eff_Curse,1000; },{},{} +16040,Crimson_Mace,Crimson Mace,5,20,,800,80,,1,2,0x0004C5B3,63,2,2,3,70,1,8,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 16041,Mace_of_Vicious_Mind,Mace of Vicious Mind,5,20,,1300,130,,1,1,0x0004C5B3,63,2,2,4,160,1,8,{ bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,1; },{},{} 16043,Meteor_Strike,Meteor Strike,5,0,,20000,1,,1,2,0x00000001,63,2,2,4,110,1,8,{ bonus bBaseAtk,10*getskilllv("BS_WEAPONRESEARCH"); bonus bBaseAtk,30*getskilllv("MO_IRONHAND"); .@s = getskilllv("AM_AXEMASTERY"); bonus bBaseAtk,7*.@s; bonus bHit,5*.@s; bonus bBaseAtk,10*getrefine(); if (getskilllv("MC_PUSHCART") > 9) skill "MC_CARTREVOLUTION",1; if (getskilllv("SM_SWORD") > 0) skill "KN_BOWLINGBASH",1; .@str = readparam(bStr); if (.@str > 119) bonus bUseSPrate,-30; else if (.@str > 107) bonus bUseSPrate,-20; },{},{} 16051,Valkyrie_Hammer,Valkyrie Hammer,5,0,,100,50,,1,4,0x0004C3B3,63,2,2,1,70,1,8,{ if ((eaclass()&EAJ_BASEMASK) == EAJ_NOVICE) { bonus bUseSPrate,-5; .@r = getrefine(); bonus bVit,.@r; bonus bMaxHP,200; bonus bFlee2,1; bonus bAspdRate,1; bonus bVariableCast,.@r/2; } else if ((eaclass()&EAJ_BASEMASK) == EAJ_SWORDMAN) { bonus bVit,getrefine(); bonus bMaxHP,500; bonus bMaxSP,100; } else if ((eaclass()&EAJL_2) == EAJ_PRIEST) { bonus bBaseAtk,50; bonus bMatk,100; bonus bAspdRate,getrefine(); } else if ((eaclass()&EAJL_2) == EAJ_MONK) { bonus bMaxSP,200; bonus bUseSPrate,-5; bonus bFlee2,getrefine(); } else if ((eaclass()&EAJ_BASEMASK) == EAJ_MERCHANT) { bonus bBaseAtk,100; bonus bHit,10; bonus bVariableCast,getrefine()/2; } },{},{} @@ -9416,8 +9416,8 @@ 18125,Arcus_Daemonicus,Arcus Daemonicus,5,20,,1000,130,,5,2,0x00020008,63,2,34,4,80,1,11,{ /*Fix me: bonus bAtkRate,50; when equipped with shadow arrows*/ if(getrefine()>9){ bonus bAspd,1; bonus bUseSPrate,-20; } },{},{} 18126,Blue_Bow,Blue Bow,5,10,,1200,150,,5,1,0x00000800,56,2,2,3,100,1,11,{ bonus bAgi,5; bonus bDex,5; },{},{} 18127,Ru_Gold_Bow,Ru Gold Bow,5,0,,1200,150,,5,2,0x00000800,56,2,34,3,120,1,11,{ bonus bAgi,8; bonus bDex,8; },{},{} -18128,Infinity_Bow,Infinity Bow,5,20,,500,160,,5,1,0x00020048,63,2,34,4,100,1,11,{},{},{} -18130,Crimson_Bow,Crimson Bow,5,20,,1200,120,,5,2,0x00080048,63,2,34,3,70,1,11,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} +18128,Infinity_Bow,Infinity Bow,5,20,,500,160,,5,1,0x00020800,56,2,34,4,100,1,11,{},{},{} +18130,Crimson_Bow,Crimson Bow,5,20,,1200,120,,5,2,0x000A0848,63,2,34,3,70,1,11,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{} 18137,Burning_Bow_,Burning Bow,5,20,,1400,95,,5,2,0x000A0808,63,2,34,3,55,1,11,{ bonus2 bSubEle,Ele_Fire,10; },{},{} 18138,Frozen_Bow_,Frozen Bow,5,20,,1400,100,,5,2,0x000A0808,63,2,34,3,55,1,11,{ bonus2 bAddEff,Eff_Freeze,1000; },{},{} 18139,Earth_Bow_,Earth Bow,5,20,,1400,105,,5,2,0x000A0808,63,2,34,3,55,1,11,{},{},{} @@ -10770,8 +10770,8 @@ 21011,Gigantic_Blade,Gigantic Blade,5,10,,5000,300,,1,1,0x00004082,56,2,2,4,130,1,3,{ bonus bUnbreakableWeapon,1; bonus bAspdRate,-5; if(readparam(bStr)<=110){ bonus bBaseAtk,-250; } },{},{} 21012,Some_Wizard_MagicSword,Some Wizard MagicSword,5,0,,2200,200:150,,1,2,0x00000080,56,2,34,4,110,1,3,{},{},{} 21013,Hetairoi_Sword,Hetairoi Sword,5,0,,2200,210,,1,2,0x00000080,56,2,34,4,110,1,3,{ bonus2 bSkillUseSP,"KN_AUTOCOUNTER",2; bonus2 bSkillUseSP,"LK_PARRYING",25; },{},{} -21014,Infinity_Two-Handed_Sword,Infinity Two-Handed Sword,5,20,,500,230,,1,1,0x00000002,63,2,34,4,100,1,3,{},{},{} -21015,Crimson_Two-Handed_Sword,Crimson Two-Handed Sword,5,20,,1700,170,,1,2,0x00000002,63,2,34,3,70,1,3,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225); },{},{} +21014,Infinity_Two-Handed_Sword,Infinity Two-Handed Sword,5,20,,500,230,,1,1,0x00004082,56,2,34,4,100,1,3,{},{},{} +21015,Crimson_Two-Handed_Sword,Crimson Two-Handed Sword,5,20,,1700,170,,1,2,0x00004082,63,2,34,3,70,1,3,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225); },{},{} 21016,Two_Handed_Sword_of_Vicious_Mind,Two-Handed Sword of Vicious Mind,5,20,,2200,220,,1,1,0x00004082,63,2,34,4,160,1,3,{ bonus bAtk,pow(min(getrefine(),15),2); },{},{} 21018,Lindy_Hop,Lindy Hop,5,20,,3400,340,,1,2,0x00000002,40,2,34,4,170,1,3,{ .@r = getrefine(); bonus bAtkRate,(.@r/2); bonus bAspdRate,.@r; },{},{} 21019,Onimaru,Onimaru,5,0,,4200,75,,1,2,0x00000080,56,2,34,4,130,1,3,{ .@bstr = readparam(bStr); .@r = getrefine(); bonus bBaseAtk,(min(120,.@bstr)); if (.@bstr > 119) bonus bBaseAtk,160; else if (.@bstr > 107) bonus bBaseAtk,80; else if (.@bstr > 94) bonus bBaseAtk,40; if (.@r > 6) bonus bUnbreakableWeapon,1; bonus4 bAutoSpell,"NPC_WIDECURSE",4,100,0; if (.@r > 8) bonus4 bAutoSpellOnSkill,"LK_BERSERK","BS_OVERTHRUST",5,100; },{},{} @@ -11338,8 +11338,8 @@ 28102,Half_BF_Two_Handed_Axe1,Half BF Two Handed Axe1,5,20,,0,200,,1,0,0x000444A2,63,2,34,3,80,1,7,{ bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon,1; },{},{} 28103,Blue_Twohand_Axe,Blue Twohand Axe,5,10,,3000,330,,1,1,0x00000400,56,2,2,3,1,1,7,{ bonus bStr,5; bonus bVit,5; },{},{} 28104,Ru_Gold_Axe_M,Ru Gold Axe M,5,0,,3000,330,,1,2,0x00000400,56,2,34,3,120,1,7,{ bonus bStr,8; bonus bVit,8; },{},{} -28105,Infinity_Axe,Infinity Axe,5,10,,500,265,,1,1,0x00000022,7,2,34,4,100,1,7,{},{},{} -28106,Crimson_Two-Handed_Axe,Crimson Two-Handed Axe,5,20,,2000,200,,1,2,0x00000022,63,2,34,3,70,1,7,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1; },{},{} +28105,Infinity_Axe,Infinity Axe,5,10,,500,265,,1,1,0x000444A2,56,2,34,4,100,1,7,{},{},{} +28106,Crimson_Two-Handed_Axe,Crimson Two-Handed Axe,5,20,,2000,200,,1,2,0x000444A2,63,2,34,3,70,1,7,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1; },{},{} // 28107,Two_Handed_Axe_of_Vicious_Mind,Two Handed Axe of Vicious Mind,5,20,,2500,250,,1,1,0x000444A2,63,2,34,4,160,1,7,{ bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,1; },{},{} 28200,End_Of_The_Horizon,End Of The Horizon,5,2700000,,2400,410,,9,1,0x40000000,63,2,34,4,110,1,21,{},{},{} @@ -11421,8 +11421,8 @@ 28700,Ru_Gold_Dagger,Ru Gold Dagger,5,0,,1000,160,,1,2,0x00020000,56,2,2,3,120,1,1,{ bonus bStr,8; bonus bInt,8; },{},{} 28701,Ru_Gold_Knife,Ru Gold Knife,5,0,,500,160,,1,2,0x00010000,56,2,2,3,120,1,1,{ bonus bVit,8; bonus bInt,8; },{},{} 28702,Ru_Gold_Ashura,Ru Gold Ashura,5,0,,1000,150:150,,1,2,0x2000000,63,2,2,3,120,1,1,{},{},{} -28703,Infinity_Dagger,Infinity Dagger,5,10,,500,125,,1,1,0x0280026B,7,2,2,4,100,1,1,{},{},{} -28705,Crimson_Dagger,Crimson Dagger,5,20,,550,55,,1,2,0x02800271,63,2,2,3,70,1,1,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225); },{},{} +28703,Infinity_Dagger,Infinity Dagger,5,10,,500,125,,1,1,0x028F5EEF,56,2,2,4,100,1,1,{},{},{} +28705,Crimson_Dagger,Crimson Dagger,5,20,,550,55,,1,2,0x028F5EEF,63,2,2,3,70,1,1,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225); },{},{} 28706,Dagger_of_Vicious_Mind,Dagger of Vicious Mind,5,20,,1050,105:50,,1,1,0x028F5EEF,63,2,2,4,160,1,1,{ bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; },{},{} 28900,Guardsmen's_Shield,Guardsmen's Shield,4,20,,3000,,30,,1,0xFFFFFFFF,63,2,32,,100,1,1,{ .@r = getrefine(); skill "LG_SHIELDSPELL",1; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,(10+(.@r*10)); bonus bDef,(.@r*10); bonus bMdef,.@r; },{},{} 28903,Scutum,Scutum,4,0,,500,,1,,1,0xFFFFFFFF,63,2,32,1,1,1,,{ .@r = getrefine(); bonus bFlee,5+(.@r*3); bonus bFlee2,1+(.@r*2); if (.@r > 10) { bonus bMaxHPrate,10; bonus bMaxSPrate,10; } },{},{} From 4c2adc0d0b3a65a599c0cb7e5ea089af801970f7 Mon Sep 17 00:00:00 2001 From: rAthenaAPI <administrator@rathena.org> Date: Fri, 11 Nov 2016 05:41:34 +0100 Subject: [PATCH 67/67] SQL synchronization --- sql-files/item_db_re.sql | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql index 06761703b2..f5ba25cdb0 100644 --- a/sql-files/item_db_re.sql +++ b/sql-files/item_db_re.sql @@ -816,7 +816,7 @@ REPLACE INTO `item_db_re` VALUES (1439,'Half_BF_Spear1','Half BF Spear1',5,20,NU REPLACE INTO `item_db_re` VALUES (1440,'Battle_Hook_','Battle Hook',5,20,NULL,900,'140',NULL,3,3,0x00004082,18,2,2,4,'65',1,4,'bonus2 bAddEff,Eff_Stun,500; bonus2 bAddRace,RC_DemiHuman,20; bonus2 bAddRace,RC_Player,20; skill "KN_PIERCE",3;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1441,'Blue_Spear','Blue Spear',5,10,NULL,1200,'180:170',NULL,3,1,0x00004000,56,2,2,3,'100',1,4,'bonus bDex,5; bonus bInt,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1442,'Ru_Gold_Spear','Ru Gold Spear',5,0,NULL,1200,'180',NULL,3,2,0x00004000,56,2,2,3,'120',1,4,'bonus bStr,8; bonus bAgi,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (1443,'Crimson_Spear','Crimson Spear',5,20,NULL,900,'90',NULL,3,2,0x00000002,56,2,2,3,'70',1,4,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (1443,'Crimson_Spear','Crimson Spear',5,20,NULL,900,'90',NULL,3,2,0x00004082,56,2,2,3,'70',1,4,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1446,'Requiem_Spear','Requiem Spear',5,20,NULL,1000,'130',NULL,3,NULL,0x00004080,63,2,2,4,'100',1,4,'.@r = getrefine(); .@b = 40; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+20; } bonus2 bAddRace2,RC2_BioLab,.@b;',NULL,NULL); #=================================================================== # 2-Handed Spears @@ -875,7 +875,7 @@ REPLACE INTO `item_db_re` VALUES (1494,'Undine_Spear','Spear Of Odin',5,50000,NU REPLACE INTO `item_db_re` VALUES (1495,'TE_Woe_Lance','TE Woe Lance',5,0,NULL,0,'150',NULL,3,0,0x00004082,63,2,34,3,'40',1,5,'bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Blind,3000;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1496,'Tanos_Two-Handed_Spear','Tanos Two-Handed Spear',5,10,NULL,3750,'250:50',NULL,NULL,1,0x00004082,63,2,34,4,'120',1,5,'bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bAtkRate,5; bonus2 bHPLossRate,100,10000;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1497,'Hell_Fire_','Hellfire',5,20,NULL,3500,'200',NULL,3,3,0x00004082,63,2,34,4,'48',1,5,'bonus bAtkEle,Ele_Fire; bonus3 bAutoSpell,"MG_FIREBALL",5,100; bonus bStr,3;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (1498,'Crimson_Lance','Crimson Lance',5,20,NULL,1750,'175',NULL,1,2,0x00000002,63,2,34,3,'70',1,5,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (1498,'Crimson_Lance','Crimson Lance',5,20,NULL,1750,'175',NULL,1,2,0x00004082,63,2,34,3,'70',1,5,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1499,'Requiem_Lance','Requiem Lance',5,20,NULL,1500,'220',NULL,3,NULL,0x00004080,63,2,34,4,'100',1,5,'.@r = getrefine(); .@b = 40; .@c = 5; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+30; .@c += (.@r-5); } bonus2 bAddRace2,RC2_BioLab,.@b; bonus2 bSubRace2,RC2_BioLab,.@c;',NULL,NULL); #=================================================================== # Maces @@ -1060,7 +1060,7 @@ REPLACE INTO `item_db_re` VALUES (1676,'Baculum_Daemonicum','Baculum Daemonicum' REPLACE INTO `item_db_re` VALUES (1677,'Blue_Wand','Blue Wand',5,10,NULL,0,'50',NULL,1,1,0x00000200,56,2,2,3,'100',1,10,'bonus bStr,5; bonus bInt,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1678,'Ru_Gold_Wand','Ru Gold Wand',5,0,NULL,0,'50',NULL,1,2,0x00000200,56,2,2,3,'120',1,10,'bonus bDex,8; bonus bInt,8;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1679,'Rafini_Staff_','Laphine Staff',5,20,NULL,500,'30:180',NULL,1,2,0x00818315,63,2,2,3,'100',1,10,'bonus bFixedCastRate,-getrefine();',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (1680,'Crimson_One-Handed_Staff','Crimson One-Handed Staff',5,10,NULL,600,'60:70',NULL,1,2,0x00800015,63,2,2,3,'70',1,10,'.@r = getrefine(); bonus bInt,4; bonus bMatk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (1680,'Crimson_One-Handed_Staff','Crimson One-Handed Staff',5,10,NULL,600,'60:70',NULL,1,2,0x00818315,63,2,2,3,'70',1,10,'.@r = getrefine(); bonus bInt,4; bonus bMatk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1681,'Short_Foxtail_Staff','Short Foxtail Staff',5,20,NULL,0,'30',NULL,1,0,0x80000000,7,2,2,1,'1',1,10,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (1682,'Shadow_Staff','Shadow Staff',5,0,NULL,600,'70:130',NULL,1,2,0x00000200,56,2,2,4,'90',1,10,'.@r = getrefine(); bonus2 bSkillAtk,"WL_HELLINFERNO",(getskilllv("WL_HELLINFERNO") >= 5 ? 100 : 0) + (.@r*10); bonus2 bIgnoreMdefRaceRate,RC_All,5; autobonus "{ bonus2 bVariableCastrate,\\\"WL_HELLINFERNO\\\",-30; }",.@r*20,5000,BF_MAGIC,"{ specialeffect2 EF_SPELLBREAKER }";',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1683,'Enriched_Foxtail_Staff','Enriched Foxtail Staff',5,20,NULL,200,'50:70',NULL,1,1,0x80000000,7,2,2,2,'12',1,10,'bonus bMaxSP,50;',NULL,NULL); @@ -1244,7 +1244,7 @@ REPLACE INTO `item_db_re` VALUES (1934,'Contrabass','Contrabass',5,20,NULL,250,' REPLACE INTO `item_db_re` VALUES (1935,'Ozs_New_Ukulele','Oz\'s New Ukulele',5,20,NULL,2000,'160',NULL,1,2,0x00080000,63,1,2,4,'130',1,13,'bonus2 bSkillUseSP,"MI_RUSH_WINDMILL",-20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1936,'Blue_Violin','Blue Violin',5,10,NULL,1500,'180',NULL,2,1,0x00080000,63,1,2,3,'100',1,13,'bonus bDex,5; bonus bVit,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1937,'Ru_Gold_Violin','Ru Gold Violin',5,0,NULL,1500,'180',NULL,1,2,0x00080000,56,2,2,3,'120',1,13,'bonus bDex,8; bonus bVit,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (1938,'Infinity_Violin','Infinity Violin',5,10,NULL,500,'150',NULL,2,1,0x00080000,63,1,2,4,'100',1,13,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (1938,'Infinity_Violin','Infinity Violin',5,10,NULL,500,'150',NULL,2,1,0x00080000,56,1,2,4,'100',1,13,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (1939,'Crimson_Violin','Crimson Violin',5,20,NULL,800,'80',NULL,2,2,0x00080000,63,1,2,3,'70',1,13,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1940,'Trumpet_Shell','Trumpet Shell',5,0,NULL,600,'125',NULL,1,1,0x00080000,56,1,2,4,'130',1,13,'.@r = getrefine(); bonus bDex,.@r; bonus bInt,.@r; .@per = ((.@r > 9) ? 40 : ((.@r > 7) ? 20 : ((.@r > 5) ? 10 : 0))); bonus2 bSkillAtk,"WM_REVERBERATION",.@per; bonus2 bVariableCastrate,"WM_REVERBERATION",-.@per;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1942,'Requiem_Violin','Requiem Violin',5,20,NULL,500,'160:120',NULL,1,NULL,0x00080000,63,1,2,4,'100',1,13,'.@r = getrefine(); .@b = 40; bonus bUnbreakableWeapon,1; if(.@r>=5){ .@b += (.@r-5)*15+20; } if(.@r>=7) bonus2 bSkillAtk,"CG_ARROWVULCAN",200; bonus2 bAddRace2,RC2_BioLab,.@b;',NULL,NULL); @@ -1294,7 +1294,7 @@ REPLACE INTO `item_db_re` VALUES (1989,'Rhythmic_Gymnastics_Ribbon','Rhythmic Gy REPLACE INTO `item_db_re` VALUES (1990,'Bloody_Floral_Decoration_Microphone','Bloody Floral Decoration Microphone',5,20,NULL,1000,'160',NULL,2,2,0x00080000,63,0,2,4,'130',1,14,'bonus2 bSkillUseSP,"CG_MOONLIT",-20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1991,'Blue_Whip','Blue Whip',5,10,NULL,1500,'180',NULL,2,1,0x00080000,63,0,2,3,'100',1,14,'bonus bDex,5; bonus bVit,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1992,'Ru_Gold_Whip','Ru Gold Whip',5,0,NULL,1500,'180',NULL,2,2,0x00080000,56,2,2,3,'120',1,14,'bonus bDex,8; bonus bVit,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (1994,'Infinity_Whip','Infinity Whip',5,10,NULL,500,'150',NULL,2,1,0x00080000,63,0,2,4,'100',1,14,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (1994,'Infinity_Whip','Infinity Whip',5,10,NULL,500,'150',NULL,2,1,0x00080000,56,0,2,4,'100',1,14,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (1995,'Crimson_Whip','Crimson Whip',5,20,NULL,800,'80',NULL,2,2,0x00080000,63,0,2,3,'70',1,14,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (1996,'Wire_of_Vicious_Mind','Wire of Vicious Mind',5,20,NULL,1300,'130:50',NULL,2,1,0x00080000,63,NULL,2,4,'160',1,14,'bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2;',NULL,NULL); #=================================================================== @@ -1324,8 +1324,8 @@ REPLACE INTO `item_db_re` VALUES (2020,'Jormungand','Jormungand',5,10,NULL,3000, REPLACE INTO `item_db_re` VALUES (2021,'Ganbantein','Ganbantein',5,0,NULL,2000,'100:320',NULL,1,0,0x00000200,56,2,2,4,'100',1,10,'bonus bInt,25; bonus bDex,25; bonus3 bAddEff,Eff_Poison,1000,ATF_MAGIC; bonus3 bAutoSpell,"AB_SILENTIUM",1,100; bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2022,'Geffen_Staff','Staff of Geffen',5,20,NULL,1000,'100:300',NULL,1,1,0x00000200,18,2,34,1,'150',1,23,'bonus bInt,20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2023,'Tanos_Two-handed_Stick','Tanos Two-handed Stick',5,10,NULL,1400,'120:250',NULL,NULL,1,0x810200,63,2,34,4,'120',1,23,'bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus bHealPower,18; bonus2 bHPLossRate,100,10000;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (2024,'Infinity_Two-handed_Stick','Infinity Two-handed Stick',5,10,NULL,500,'30:170',NULL,NULL,1,0x810200,63,2,34,4,'100',1,23,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (2025,'Crimson_Two-Handed_Staff','Crimson Two-Handed Staff',5,20,NULL,1000,'100',NULL,1,2,0x000014,63,2,34,3,'70',1,23,'.@r = getrefine(); bonus bInt,5; bonus bMatk,150+((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (2024,'Infinity_Two-handed_Stick','Infinity Two-handed Stick',5,10,NULL,500,'30:170',NULL,NULL,1,0x810200,56,2,34,4,'100',1,23,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (2025,'Crimson_Two-Handed_Staff','Crimson Two-Handed Staff',5,20,NULL,1000,'100',NULL,1,2,0x800200,63,2,34,3,'70',1,23,'.@r = getrefine(); bonus bInt,5; bonus bMatk,150+((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2026,'Staff_of_Vicious_Mind','Staff of Vicious Mind',5,20,NULL,1000,'100:200',NULL,1,1,0x00810204,63,2,34,4,'160',1,23,'bonus bMatk,pow(min(getrefine(),15),2); bonus bInt,6; bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2027,'Sunflower_Kid','Sunflower Kid',5,10,NULL,1500,'150:320',NULL,NULL,2,0x00000200,40,2,34,4,'170',1,23,'bonus bInt,5; .@r = getrefine(); bonus bMatkRate,(.@r/2); bonus bDelayrate,(.@r*-1); bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2032,'Requiem_Wizardry_Staff','Requiem Wizardry Staff',5,20,NULL,500,'100:230',NULL,1,NULL,0xFFFFFFFF,63,2,2,4,'100',1,10,'.@r = getrefine(); .@b = 40; .@c = 5; if(.@r>=5){ .@b += (.@r-5)*15+20; .@c += .@r-5; } bonus2 bMagicAddRace2,RC2_BioLab,.@b; bonus2 bSubRace2,RC2_BioLab,.@c; bonus2 bIgnoreMdefRace2Rate,RC2_BioLab,(.@r-5)*10;',NULL,NULL); @@ -7273,7 +7273,7 @@ REPLACE INTO `item_db_re` VALUES (13120,'Heaven\'s_Feather_and_Hell\'s_Fire','He REPLACE INTO `item_db_re` VALUES (13122,'Altea_and_Ares','Altea & Ares',5,1450000,NULL,1000,'200',NULL,9,0,0x40000000,63,2,34,3,'140',1,17,'bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13124,'Altea_and_Ares_','Altea & Ares',5,1450000,NULL,1000,'200',NULL,9,1,0x40000000,63,2,34,3,'140',1,17,'bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13125,'Metal_Revolver','Metal Revolver',5,0,NULL,0,'30',NULL,7,1,0x41000000,63,2,34,3,'1',0,17,'bonus bBaseAtk,getrefine(); bonus bLongAtkRate,1; if (BaseLevel >= 20 && BaseLevel <= 120) { bonus bBaseAtk,3*(BaseLevel/10); }',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (13126,'Infinity_Pistol','Infinity Pistol',5,10,NULL,500,'175',NULL,7,1,0x41000000,63,2,34,4,'100',0,17,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (13126,'Infinity_Pistol','Infinity Pistol',5,10,NULL,500,'175',NULL,7,1,0x40000000,63,2,34,4,'100',0,17,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (13127,'Crimson_Revolver','Crimson Revolver',5,20,NULL,1000,'100',NULL,7,2,0x41000000,63,2,34,3,'70',1,17,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); #=================================================================== # Guns @@ -7435,8 +7435,8 @@ REPLACE INTO `item_db_re` VALUES (13316,'Upg_Huuma_Shuriken','Upg Huuma Shuriken REPLACE INTO `item_db_re` VALUES (13317,'TE_Woe_Huuma','TE Woe Huuma',5,0,NULL,0,'80:100',NULL,1,0,0x22000000,63,2,2,3,'40',1,22,'bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Bleeding,3000;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13321,'Half_BF_Huuma_Shuriken2','Half BF Huuma Shuriken',5,20,NULL,0,'55',NULL,1,0,0x02000000,63,2,34,3,'80',1,22,'bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,40; bonus2 bAddRace,RC_Player,40; autobonus "{ bonus2 bSkillAtk,\\\"NJ_HUUMA\\\",100; bonus2 bSkillAtk,\\\"NJ_ISSEN\\\",100; }",50,10000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13322,'Huuma_Metal_Shuriken','Huuma Metal Shuriken',5,20,NULL,0,'50',NULL,1,1,0x02000000,63,2,34,3,'1',1,22,'bonus bUnbreakableWeapon,1; .@r = getrefine(); bonus bBaseAtk,.@r*5; bonus bMatk,.@r*3; if(.@r>=2) bonus bNearAtkDef,1*.@r/2; if (BaseLevel >= 20 && BaseLevel <= 120) bonus bBaseAtk,3*.@r/10;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (13323,'Infinity_Shuriken','Infinity Shuriken',5,0,NULL,500,'150:40',NULL,1,1,0x02000000,63,2,34,4,'100',1,22,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (13327,'Crimson_Huuma_Shuriken','Crimson Huuma Shuriken',5,20,NULL,1000,'100',NULL,1,2,0x02000000,63,2,34,3,'70',1,22,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (13323,'Infinity_Shuriken','Infinity Shuriken',5,0,NULL,500,'150:40',NULL,1,1,0x20000000,63,2,34,4,'100',1,22,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (13327,'Crimson_Huuma_Shuriken','Crimson Huuma Shuriken',5,20,NULL,1000,'100',NULL,1,2,0x22000000,63,2,34,3,'70',1,22,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13328,'Huuma_Shuriken_of_Vicious_Mind','Huuma Shuriken of Vicious Mind',5,20,NULL,1500,'150:50',NULL,1,1,0x22000000,63,2,34,4,'160',1,22,'bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; bonus bUnbreakableWeapon,1;',NULL,NULL); #=================================================================== # More 1-Handed Swords @@ -7487,7 +7487,7 @@ REPLACE INTO `item_db_re` VALUES (13449,'Gladius_Daemonicus','Gladius Daemonicus REPLACE INTO `item_db_re` VALUES (13450,'Saber__','Saber',5,10,NULL,1000,'115',NULL,NULL,2,0x000654E2,63,2,2,3,'27',1,0,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (13451,'Blue_Sword','Blue Sword',5,10,NULL,1200,'190',NULL,1,1,0x00000080,56,2,2,3,'100',1,2,'bonus bStr,5; bonus bAgi,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13452,'Ru_Gold_Sword','Ru Gold Sword',5,0,NULL,1200,'190',NULL,1,2,0x00000080,56,2,2,3,'120',1,2,'bonus bStr,8; bonus bAgi,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (13454,'Crimson_Saber','Crimson Saber',5,20,NULL,850,'85',NULL,1,2,0x00000063,56,2,2,3,'70',1,2,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (13454,'Crimson_Saber','Crimson Saber',5,20,NULL,850,'85',NULL,1,2,0x000654E3,56,2,2,3,'70',1,2,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (13455,'Saber_of_Vicious_Mind','Saber of Vicious Mind',5,20,NULL,1350,'135',NULL,1,1,0x000654E3,63,2,2,4,'160',1,2,'bonus bAtk,pow(min(getrefine(),15),2);',NULL,NULL); #=================================================================== # More Cash Shop Items @@ -8716,9 +8716,9 @@ REPLACE INTO `item_db_re` VALUES (16034,'Half_Mjolnir','Half Mjolnir',5,20,NULL, REPLACE INTO `item_db_re` VALUES (16035,'Half_BF_Morning_Star1','Half BF Morning Star1',5,20,NULL,0,'105',NULL,1,0,0x0004C5B3,63,2,2,3,'80',1,8,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (16036,'Blue_Mace','Blue Mace',5,10,NULL,1500,'170',NULL,1,1,0x00008000,56,2,2,3,'100',1,8,'bonus bVit,5; bonus bInt,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (16037,'Ru_Gold_Mace','Ru Gold Mace',5,0,NULL,1500,'170',NULL,1,2,0x00008000,56,2,2,3,'120',1,8,'bonus bVit,8; bonus bInt,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (16038,'Infinity_Mace','Infinity Mace',5,10,NULL,500,'155',NULL,1,1,0x00000032,40,2,2,4,'100',1,8,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (16039,'Spoon','Spoon',5,10,NULL,1000,'80',NULL,1,1,0x00000033,63,2,2,3,'40',1,8,'bonus bAspd,10; bonus2 bAddEff,Eff_Curse,1000;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (16040,'Crimson_Mace','Crimson Mace',5,20,NULL,800,'80',NULL,1,2,0x00000033,63,2,2,3,'70',1,8,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (16038,'Infinity_Mace','Infinity Mace',5,10,NULL,500,'155',NULL,1,1,0x0004C780,56,2,2,4,'100',1,8,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (16039,'Spoon','Spoon',5,10,NULL,1000,'80',NULL,1,1,0x0004C5B3,63,2,2,3,'40',1,8,'bonus bAspd,10; bonus2 bAddEff,Eff_Curse,1000;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (16040,'Crimson_Mace','Crimson Mace',5,20,NULL,800,'80',NULL,1,2,0x0004C5B3,63,2,2,3,'70',1,8,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (16041,'Mace_of_Vicious_Mind','Mace of Vicious Mind',5,20,NULL,1300,'130',NULL,1,1,0x0004C5B3,63,2,2,4,'160',1,8,'bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (16043,'Meteor_Strike','Meteor Strike',5,0,NULL,20000,'1',NULL,1,2,0x00000001,63,2,2,4,'110',1,8,'bonus bBaseAtk,10*getskilllv("BS_WEAPONRESEARCH"); bonus bBaseAtk,30*getskilllv("MO_IRONHAND"); .@s = getskilllv("AM_AXEMASTERY"); bonus bBaseAtk,7*.@s; bonus bHit,5*.@s; bonus bBaseAtk,10*getrefine(); if (getskilllv("MC_PUSHCART") > 9) skill "MC_CARTREVOLUTION",1; if (getskilllv("SM_SWORD") > 0) skill "KN_BOWLINGBASH",1; .@str = readparam(bStr); if (.@str > 119) bonus bUseSPrate,-30; else if (.@str > 107) bonus bUseSPrate,-20;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (16051,'Valkyrie_Hammer','Valkyrie Hammer',5,0,NULL,100,'50',NULL,1,4,0x0004C3B3,63,2,2,1,'70',1,8,'if ((eaclass()&EAJ_BASEMASK) == EAJ_NOVICE) { bonus bUseSPrate,-5; .@r = getrefine(); bonus bVit,.@r; bonus bMaxHP,200; bonus bFlee2,1; bonus bAspdRate,1; bonus bVariableCast,.@r/2; } else if ((eaclass()&EAJ_BASEMASK) == EAJ_SWORDMAN) { bonus bVit,getrefine(); bonus bMaxHP,500; bonus bMaxSP,100; } else if ((eaclass()&EAJL_2) == EAJ_PRIEST) { bonus bBaseAtk,50; bonus bMatk,100; bonus bAspdRate,getrefine(); } else if ((eaclass()&EAJL_2) == EAJ_MONK) { bonus bMaxSP,200; bonus bUseSPrate,-5; bonus bFlee2,getrefine(); } else if ((eaclass()&EAJ_BASEMASK) == EAJ_MERCHANT) { bonus bBaseAtk,100; bonus bHit,10; bonus bVariableCast,getrefine()/2; }',NULL,NULL); @@ -9448,8 +9448,8 @@ REPLACE INTO `item_db_re` VALUES (18124,'Half_BF_Bow1','Half BF Bow1',5,20,NULL, REPLACE INTO `item_db_re` VALUES (18125,'Arcus_Daemonicus','Arcus Daemonicus',5,20,NULL,1000,'130',NULL,5,2,0x00020008,63,2,34,4,'80',1,11,'/*Fix me: bonus bAtkRate,50; when equipped with shadow arrows*/ if(getrefine()>9){ bonus bAspd,1; bonus bUseSPrate,-20; }',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18126,'Blue_Bow','Blue Bow',5,10,NULL,1200,'150',NULL,5,1,0x00000800,56,2,2,3,'100',1,11,'bonus bAgi,5; bonus bDex,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18127,'Ru_Gold_Bow','Ru Gold Bow',5,0,NULL,1200,'150',NULL,5,2,0x00000800,56,2,34,3,'120',1,11,'bonus bAgi,8; bonus bDex,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (18128,'Infinity_Bow','Infinity Bow',5,20,NULL,500,'160',NULL,5,1,0x00020048,63,2,34,4,'100',1,11,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (18130,'Crimson_Bow','Crimson Bow',5,20,NULL,1200,'120',NULL,5,2,0x00080048,63,2,34,3,'70',1,11,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (18128,'Infinity_Bow','Infinity Bow',5,20,NULL,500,'160',NULL,5,1,0x00020800,56,2,34,4,'100',1,11,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (18130,'Crimson_Bow','Crimson Bow',5,20,NULL,1200,'120',NULL,5,2,0x000A0848,63,2,34,3,'70',1,11,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18137,'Burning_Bow_','Burning Bow',5,20,NULL,1400,'95',NULL,5,2,0x000A0808,63,2,34,3,'55',1,11,'bonus2 bSubEle,Ele_Fire,10;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18138,'Frozen_Bow_','Frozen Bow',5,20,NULL,1400,'100',NULL,5,2,0x000A0808,63,2,34,3,'55',1,11,'bonus2 bAddEff,Eff_Freeze,1000;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18139,'Earth_Bow_','Earth Bow',5,20,NULL,1400,'105',NULL,5,2,0x000A0808,63,2,34,3,'55',1,11,NULL,NULL,NULL); @@ -10802,8 +10802,8 @@ REPLACE INTO `item_db_re` VALUES (21010,'Tw_Sword_Of_Evil_Slayer','Tw Sword Of E REPLACE INTO `item_db_re` VALUES (21011,'Gigantic_Blade','Gigantic Blade',5,10,NULL,5000,'300',NULL,1,1,0x00004082,56,2,2,4,'130',1,3,'bonus bUnbreakableWeapon,1; bonus bAspdRate,-5; if(readparam(bStr)<=110){ bonus bBaseAtk,-250; }',NULL,NULL); REPLACE INTO `item_db_re` VALUES (21012,'Some_Wizard_MagicSword','Some Wizard MagicSword',5,0,NULL,2200,'200:150',NULL,1,2,0x00000080,56,2,34,4,'110',1,3,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (21013,'Hetairoi_Sword','Hetairoi Sword',5,0,NULL,2200,'210',NULL,1,2,0x00000080,56,2,34,4,'110',1,3,'bonus2 bSkillUseSP,"KN_AUTOCOUNTER",2; bonus2 bSkillUseSP,"LK_PARRYING",25;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (21014,'Infinity_Two-Handed_Sword','Infinity Two-Handed Sword',5,20,NULL,500,'230',NULL,1,1,0x00000002,63,2,34,4,'100',1,3,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (21015,'Crimson_Two-Handed_Sword','Crimson Two-Handed Sword',5,20,NULL,1700,'170',NULL,1,2,0x00000002,63,2,34,3,'70',1,3,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (21014,'Infinity_Two-Handed_Sword','Infinity Two-Handed Sword',5,20,NULL,500,'230',NULL,1,1,0x00004082,56,2,34,4,'100',1,3,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (21015,'Crimson_Two-Handed_Sword','Crimson Two-Handed Sword',5,20,NULL,1700,'170',NULL,1,2,0x00004082,63,2,34,3,'70',1,3,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (21016,'Two_Handed_Sword_of_Vicious_Mind','Two-Handed Sword of Vicious Mind',5,20,NULL,2200,'220',NULL,1,1,0x00004082,63,2,34,4,'160',1,3,'bonus bAtk,pow(min(getrefine(),15),2);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (21018,'Lindy_Hop','Lindy Hop',5,20,NULL,3400,'340',NULL,1,2,0x00000002,40,2,34,4,'170',1,3,'.@r = getrefine(); bonus bAtkRate,(.@r/2); bonus bAspdRate,.@r;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (21019,'Onimaru','Onimaru',5,0,NULL,4200,'75',NULL,1,2,0x00000080,56,2,34,4,'130',1,3,'.@bstr = readparam(bStr); .@r = getrefine(); bonus bBaseAtk,(min(120,.@bstr)); if (.@bstr > 119) bonus bBaseAtk,160; else if (.@bstr > 107) bonus bBaseAtk,80; else if (.@bstr > 94) bonus bBaseAtk,40; if (.@r > 6) bonus bUnbreakableWeapon,1; bonus4 bAutoSpell,"NPC_WIDECURSE",4,100,0; if (.@r > 8) bonus4 bAutoSpellOnSkill,"LK_BERSERK","BS_OVERTHRUST",5,100;',NULL,NULL); @@ -11370,8 +11370,8 @@ REPLACE INTO `item_db_re` VALUES (28101,'Axe_Tornado','Axe Tornado',5,10,NULL,40 REPLACE INTO `item_db_re` VALUES (28102,'Half_BF_Two_Handed_Axe1','Half BF Two Handed Axe1',5,20,NULL,0,'200',NULL,1,0,0x000444A2,63,2,34,3,'80',1,7,'bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28103,'Blue_Twohand_Axe','Blue Twohand Axe',5,10,NULL,3000,'330',NULL,1,1,0x00000400,56,2,2,3,'1',1,7,'bonus bStr,5; bonus bVit,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28104,'Ru_Gold_Axe_M','Ru Gold Axe M',5,0,NULL,3000,'330',NULL,1,2,0x00000400,56,2,34,3,'120',1,7,'bonus bStr,8; bonus bVit,8;',NULL,NULL); -REPLACE INTO `item_db_re` VALUES (28105,'Infinity_Axe','Infinity Axe',5,10,NULL,500,'265',NULL,1,1,0x00000022,7,2,34,4,'100',1,7,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (28106,'Crimson_Two-Handed_Axe','Crimson Two-Handed Axe',5,20,NULL,2000,'200',NULL,1,2,0x00000022,63,2,34,3,'70',1,7,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1;',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (28105,'Infinity_Axe','Infinity Axe',5,10,NULL,500,'265',NULL,1,1,0x000444A2,56,2,34,4,'100',1,7,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (28106,'Crimson_Two-Handed_Axe','Crimson Two-Handed Axe',5,20,NULL,2000,'200',NULL,1,2,0x000444A2,63,2,34,3,'70',1,7,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bUnbreakableWeapon,1;',NULL,NULL); # REPLACE INTO `item_db_re` VALUES (28107,'Two_Handed_Axe_of_Vicious_Mind','Two Handed Axe of Vicious Mind',5,20,NULL,2500,'250',NULL,1,1,0x000444A2,63,2,34,4,'160',1,7,'bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28200,'End_Of_The_Horizon','End Of The Horizon',5,2700000,NULL,2400,'410',NULL,9,1,0x40000000,63,2,34,4,'110',1,21,NULL,NULL,NULL); @@ -11453,8 +11453,8 @@ REPLACE INTO `item_db_re` VALUES (28605,'Book_of_Vicious_Mind','Book of Vicious REPLACE INTO `item_db_re` VALUES (28700,'Ru_Gold_Dagger','Ru Gold Dagger',5,0,NULL,1000,'160',NULL,1,2,0x00020000,56,2,2,3,'120',1,1,'bonus bStr,8; bonus bInt,8;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28701,'Ru_Gold_Knife','Ru Gold Knife',5,0,NULL,500,'160',NULL,1,2,0x00010000,56,2,2,3,'120',1,1,'bonus bVit,8; bonus bInt,8;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28702,'Ru_Gold_Ashura','Ru Gold Ashura',5,0,NULL,1000,'150:150',NULL,1,2,0x2000000,63,2,2,3,'120',1,1,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (28703,'Infinity_Dagger','Infinity Dagger',5,10,NULL,500,'125',NULL,1,1,0x0280026B,7,2,2,4,'100',1,1,NULL,NULL,NULL); -REPLACE INTO `item_db_re` VALUES (28705,'Crimson_Dagger','Crimson Dagger',5,20,NULL,550,'55',NULL,1,2,0x02800271,63,2,2,3,'70',1,1,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225);',NULL,NULL); +REPLACE INTO `item_db_re` VALUES (28703,'Infinity_Dagger','Infinity Dagger',5,10,NULL,500,'125',NULL,1,1,0x028F5EEF,56,2,2,4,'100',1,1,NULL,NULL,NULL); +REPLACE INTO `item_db_re` VALUES (28705,'Crimson_Dagger','Crimson Dagger',5,20,NULL,550,'55',NULL,1,2,0x028F5EEF,63,2,2,3,'70',1,1,'.@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); bonus bMatk,(.@r<=15?(pow(.@r,2)/2):225);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28706,'Dagger_of_Vicious_Mind','Dagger of Vicious Mind',5,20,NULL,1050,'105:50',NULL,1,1,0x028F5EEF,63,2,2,4,'160',1,1,'bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28900,'Guardsmen\'s_Shield','Guardsmen\'s Shield',4,20,NULL,3000,NULL,30,NULL,1,0xFFFFFFFF,63,2,32,NULL,'100',1,1,'.@r = getrefine(); skill "LG_SHIELDSPELL",1; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,(10+(.@r*10)); bonus bDef,(.@r*10); bonus bMdef,.@r;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (28903,'Scutum','Scutum',4,0,NULL,500,NULL,1,NULL,1,0xFFFFFFFF,63,2,32,1,'1',1,NULL,'.@r = getrefine(); bonus bFlee,5+(.@r*3); bonus bFlee2,1+(.@r*2); if (.@r > 10) { bonus bMaxHPrate,10; bonus bMaxSPrate,10; }',NULL,NULL);