Index: src/common/mmo.h =================================================================== --- src/common/mmo.h (revision 17313) +++ src/common/mmo.h (working copy) @@ -47,8 +47,8 @@ // 20120307 - 2012-03-07aRagexeRE+ - 0x970 #ifndef PACKETVER - #define PACKETVER 20120410 - //#define PACKETVER 20130320 + //#define PACKETVER 20120410 + #define PACKETVER 20130320 //#define PACKETVER 20111116 #endif Index: src/map/channel.c =================================================================== --- src/map/channel.c (revision 17313) +++ src/map/channel.c (working copy) @@ -335,13 +335,12 @@ return -1; if(!pc_has_permission(sd, PC_PERM_CHANNEL_ADMIN) && channel->msg_delay != 0 && DIFF_TICK(sd->channel_tick + ( channel->msg_delay * 1000 ), gettick()) > 0) { - clif_colormes(sd,COLOR_RED,msg_txt(sd,1455)); //You're talking too fast! + clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1455)); //You're talking too fast! return -2; } else { char message[CHAN_MSG_LENGTH], color; - if((channel->color && Channel_Config.color_override && sd->fontcolor) - || (!channel->color && sd->fontcolor)) + if((channel->opt)&CHAN_OPT_COLOR_OVERRIDE && sd->fontcolor) color = sd->fontcolor; else color = channel->color; @@ -461,25 +460,6 @@ } /* - * Replication of clif_colormes but with more avaiable colors - * return - * 0 : all cases - */ -int channel_colormes(struct map_session_data *__restrict sd, uint32 channel_color, const char *__restrict msg){ - uint16 msg_len = strlen(msg) + 1; - - WFIFOHEAD(sd->fd,msg_len + 12); - WFIFOW(sd->fd,0) = 0x2C1; - WFIFOW(sd->fd,2) = msg_len + 12; - WFIFOL(sd->fd,4) = 0; - WFIFOL(sd->fd,8) = Channel_Config.colors[channel_color]; - safestrncpy((char*)WFIFOP(sd->fd,12), msg, msg_len); - WFIFOSET(sd->fd, msg_len + 12); - - return 0; -} - -/* * Display some info to user *sd on channels * @options : * colors : display availables colors for chan system @@ -503,7 +483,7 @@ clif_displaymessage(sd->fd, msg_txt(sd,1444)); // ---- Available Colors ---- for( k = 0; k < Channel_Config.colors_count; k++ ) { sprintf(msg, msg_txt(sd,1445),Channel_Config.colors_name[k]);// - '%s' - channel_colormes(sd, k, msg); + clif_colormes(sd,Channel_Config.colors[k],msg); } } else if( options[0] != '\0' && strcmpi(options,"mine") == 0 ) { //display chan I'm into @@ -921,10 +901,11 @@ struct Channel *channel; char output[128]; int k, s=0; - const char* opt_str[3] = { + const char* opt_str[] = { "None", "JoinAnnounce", "MessageDelay", + "ColorOverride", }; if( channel_chk(chname,NULL,1) ) { @@ -945,14 +926,14 @@ return -1; } - if( option == '\0' ) { + if(!option || option == '\0' ) { clif_displaymessage(sd->fd, msg_txt(sd,1446));// You need to input an option. return -1; } s = ARRAYLENGTH(opt_str); ARR_FIND(1,s,k,( strncmpi(option,opt_str[k],3) == 0 )); //we only cmp 3 letter atm - if( k == 3 ) { + if( k >= s ) { sprintf(output, msg_txt(sd,1447), option);// Unknown channel option '%s'. clif_displaymessage(sd->fd, output); clif_displaymessage(sd->fd, msg_txt(sd,1414));// ---- Available options: @@ -1080,11 +1061,6 @@ if( allow_user_channel_creation ) Channel_Config.user_chenable = true; - config_setting_lookup_bool(settings, "allow_user_color_override", &allow_user_color_override); - - if( allow_user_color_override ) - Channel_Config.color_override = true; - if( (colors = config_setting_get_member(settings, "colors")) != NULL ) { int color_count = config_setting_length(colors); CREATE( Channel_Config.colors, unsigned long, color_count ); Index: src/map/channel.h =================================================================== --- src/map/channel.h (revision 17313) +++ src/map/channel.h (working copy) @@ -17,6 +17,7 @@ CHAN_OPT_BASE = 0, CHAN_OPT_ANNOUNCE_JOIN = 1, //display message when join or leave CHAN_OPT_MSG_DELAY = 2, + CHAN_OPT_COLOR_OVERRIDE = 3, }; enum Channel_Type { Index: src/map/skill.c =================================================================== --- src/map/skill.c (revision 17313) +++ src/map/skill.c (working copy) @@ -9244,7 +9244,7 @@ int mode = hd->sc.data[SC_STYLE_CHANGE]->val1; char output[128]; safesnprintf(output,sizeof(output),"Eleanor is now in %s mode",(sce->val1==MH_MD_FIGHTING?"fighthing":"grappling")); - clif_colormes(hd->master,COLOR_RED,output); + clif_colormes(hd->master,color_table[COLOR_RED],output); } } break; @@ -13263,7 +13263,7 @@ MOBID_EMPERIUM, MOBID_GUARIDAN_STONE1, MOBID_GUARIDAN_STONE2)) { char output[128]; sprintf(output, "You're too close to a stone or emperium to do this skill"); - clif_colormes(sd, COLOR_RED, output); + clif_colormes(sd,color_table[COLOR_RED], output); return 0; } } @@ -13634,7 +13634,7 @@ skill_get_desc(skill_id), require.ammo_qty, itemdb_jname(sd->status.inventory[i].nameid)); - clif_colormes(sd,COLOR_RED,e_msg); + clif_colormes(sd,color_table[COLOR_RED],e_msg); return 0; } if (!(require.ammo&1<inventory_data[i]->look)) { //Ammo type check. Send the "wrong weapon type" message Index: src/map/clif.c =================================================================== --- src/map/clif.c (revision 17313) +++ src/map/clif.c (working copy) @@ -5472,9 +5472,9 @@ /*========================================== * Displays a message on a 'bl' to all it's nearby clients - * Used by npc_globalmessage + * 008d .W L (ZC_NOTIFY_CHAT) *------------------------------------------*/ -void clif_GlobalMessage(struct block_list* bl, const char* message) { +void clif_GlobalMessage(struct block_list* bl, const char* message, enum send_target target) { char buf[100]; int len; nullpo_retv(bl); @@ -5493,7 +5493,7 @@ WBUFW(buf,2)=len+8; WBUFL(buf,4)=bl->id; safestrncpy((char *) WBUFP(buf,8),message,len); - clif_send((unsigned char *) buf,WBUFW(buf,2),bl,ALL_CLIENT); + clif_send((unsigned char *) buf,WBUFW(buf,2),bl,target); } @@ -5526,12 +5526,7 @@ struct map_session_data *user; unsigned short msg_len = strlen(msg) + 1; - WFIFOHEAD(sd->fd,msg_len + 12); - WFIFOW(sd->fd,0) = 0x2C1; - 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); + clif_colormes(sd,Channel_Config.colors[color],msg); iter = db_iterator(channel->users); for( user = dbi_first(iter); dbi_exists(iter); user = dbi_next(iter) ) { @@ -8211,14 +8206,14 @@ } // Modification of clif_messagecolor to send colored messages to players to chat log only (doesn't display overhead) /// 02c1 .W .L .L .?B -int clif_colormes(struct map_session_data * sd, enum clif_colors color, const char* msg) { +int clif_colormes(struct map_session_data * sd, unsigned long color, const char* msg) { unsigned short msg_len = strlen(msg) + 1; WFIFOHEAD(sd->fd,msg_len + 12); WFIFOW(sd->fd,0) = 0x2C1; WFIFOW(sd->fd,2) = msg_len + 12; WFIFOL(sd->fd,4) = 0; - WFIFOL(sd->fd,8) = Channel_Config.colors[color]; + WFIFOL(sd->fd,8) = color; //either color_table or channel_table safestrncpy((char*)WFIFOP(sd->fd,12), msg, msg_len); WFIFOSET(sd->fd, msg_len + 12); @@ -9681,13 +9676,7 @@ textlen = strlen(fakename) + 1; } // send message to others (using the send buffer for temp. storage) - WFIFOHEAD(fd, 8 + textlen); - WFIFOW(fd,0) = 0x8d; - WFIFOW(fd,2) = 8 + textlen; - WFIFOL(fd,4) = sd->bl.id; - safestrncpy((char*)WFIFOP(fd,8), is_fake ? fakename : text, textlen); - //FIXME: chat has range of 9 only - clif_send(WFIFOP(fd,0), WFIFOW(fd,2), &sd->bl, sd->chatID ? CHAT_WOS : AREA_CHAT_WOC); + clif_GlobalMessage(&sd->bl,is_fake ? fakename : text,sd->chatID ? CHAT_WOS : AREA_CHAT_WOC); // send back message to the speaker if( is_fake ) { Index: src/map/clif.h =================================================================== --- src/map/clif.h (revision 17313) +++ src/map/clif.h (working copy) @@ -382,7 +382,7 @@ void clif_changeoption(struct block_list* bl); // area void clif_changeoption2(struct block_list* bl); // area void clif_useitemack(struct map_session_data *sd,int index,int amount,bool ok); // self -void clif_GlobalMessage(struct block_list* bl, const char* message); +void clif_GlobalMessage(struct block_list* bl, const char* message,enum send_target target); void clif_createchat(struct map_session_data* sd, int flag); // self void clif_dispchat(struct chat_data* cd, int fd); // area or fd void clif_joinchatfail(struct map_session_data *sd,int flag); // self @@ -776,7 +776,7 @@ COLOR_MAX }; unsigned long color_table[COLOR_MAX]; -int clif_colormes(struct map_session_data * sd, enum clif_colors color, const char* msg); +int clif_colormes(struct map_session_data * sd, unsigned long color, const char* msg); void clif_channel_msg(struct Channel *channel, struct map_session_data *sd, char *msg, short color); Index: src/map/pc.c =================================================================== --- src/map/pc.c (revision 17313) +++ src/map/pc.c (working copy) @@ -4107,7 +4107,7 @@ return 0; if( !item->script ) //if it has no script, you can't really consume it! return 0; - + if( (item->item_usage.flag&NOUSE_SITTING) && (pc_issit(sd) == 1) && (pc_get_group_level(sd) < item->item_usage.override) ) { return 0; // You cannot use this item while sitting. } @@ -4326,7 +4326,7 @@ sprintf(e_msg,"Item Failed. [%s] is cooling down. wait %d seconds.", itemdb_jname(sd->status.inventory[n].nameid), e_tick+1); - clif_colormes(sd,COLOR_RED,e_msg); + clif_colormes(sd,color_table[COLOR_RED],e_msg); return 0; // Delay has not expired yet } } else {// not yet used item (all slots are initially empty) @@ -6589,7 +6589,7 @@ clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd); sd->state.using_fake_npc = 0; } - + if (sd->st) { if(sd->st->state == RUN){ //wait ending code execution add_timer(gettick()+500,pc_close_npc_timer,sd->bl.id,flag); Index: src/map/npc.c =================================================================== --- src/map/npc.c (revision 17313) +++ src/map/npc.c (working copy) @@ -1150,7 +1150,7 @@ return 0; snprintf(temp, sizeof(temp), "%s : %s", name, mes); - clif_GlobalMessage(&nd->bl,temp); + clif_GlobalMessage(&nd->bl,temp,ALL_CLIENT); return 0; } Index: src/map/atcommand.c =================================================================== --- src/map/atcommand.c (revision 17313) +++ src/map/atcommand.c (working copy) @@ -8929,7 +8929,7 @@ char mout[40]; for( k = 0; k < Channel_Config.colors_count; k++ ) { sprintf(mout, "[ %s ] : %s",command,Channel_Config.colors_name[k]); - clif_colormes(sd,k,mout); + clif_colormes(sd,Channel_Config.colors[k],mout); } return -1; }