Jump to content
  • 0

request to update this code


Fluffle Puff

Question


  • Group:  Members
  • Topic Count:  29
  • Topics Per Day:  0.01
  • Content Count:  375
  • Reputation:   88
  • Joined:  12/30/11
  • Last Seen:  

Hello there.

I am not sure how to update this code.

This is from eathena but I could not find the topic where I took it (for the roll back, I think...)

clic.c

void clif_parse_GlobalMessage(int fd, struct map_session_data* sd)
{
const char* text = (char*)RFIFOP(fd,4);
int textlen = RFIFOW(fd,2) - 4;
int gm_lvl = pc_isGM(sd);
char *name, *message, *fakename = NULL;
int namelen, messagelen;
 unsigned long player = strtoul("0x",NULL,0); //Usuario Blanco
 unsigned long GM20 = strtoul("0x",NULL,0); //GM level 1 azul
 unsigned long GM40 = strtoul("0xFC96E5",NULL,0); //GM level 2 rosado
 unsigned long GM60 = strtoul("0xFFA500",NULL,0); //GM level 3 to 79 color orange
 unsigned long GM80 = strtoul("0x00008B",NULL,0); //GM level 80 to 98 color dark blue
 unsigned long admin = strtoul("0xFFF200",NULL,0); //amarillo
unsigned long girl = strtoul("0xFC96E5",NULL,0); //rosado suave
unsigned long boy = strtoul("0x",NULL,0); //azul suave
unsigned long god = strtoul("0xFF0000",NULL,0); //rojo
bool is_fake;
// validate packet and retrieve name and message
if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) )
 return;
if( is_atcommand(fd, sd, message, 1)  )
 return;
if( sd->sc.data[sC_BERSERK] || (sd->sc.data[sC_NOCHAT] && sd->sc.data[sC_NOCHAT]->val1&MANNER_NOCHAT) )
 return;
if( battle_config.min_chat_delay )
{  //[skotlex]
 if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
  return;
 sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
}
/**
 * Fake Name Design by FatalEror (bug report #9)
 **/
if( ( is_fake = ( sd->fakename[0] ) ) ) {
 fakename = (char*) malloc(strlen(sd->fakename)+messagelen+3);
 strcpy(fakename, sd->fakename);
 strcat(fakename, " : ");
 strcat(fakename, message);
 textlen = strlen(fakename) + 1;
}
// send message to others (using the send buffer for temp. storage)
WFIFOHEAD(fd, 12 + textlen);
WFIFOW(fd,0) = 0x2C1;
WFIFOW(fd,2) = 12 + textlen;
WFIFOL(fd,4) = sd->bl.id;
 if(gm_lvl == 100){
  WFIFOL(fd,8) = (god & 0x0000FF) << 16 | (god & 0x00FF00) | (god & 0xFF0000) >> 16;
 }
 else if(gm_lvl == 99){
  WFIFOL(fd,8) = (admin & 0x0000FF) << 16 | (admin & 0x00FF00) | (admin & 0xFF0000) >> 16;
 }
 else if (gm_lvl==0 && sd->status.sex==0) {
  WFIFOL(fd,8) = (girl & 0x0000FF) << 16 | (girl & 0x00FF00) | (girl & 0xFF0000) >> 16;
 }
 else if (gm_lvl==0 && sd->status.sex==1) {
  WFIFOL(fd,8) = (boy & 0x0000FF) << 16 | (boy & 0x00FF00) | (boy & 0xFF0000) >> 16;
 }
 else if (gm_lvl==1 && sd->status.sex==1) {
  WFIFOL(fd,8) = (GM20 & 0x0000FF) << 16 | (GM20 & 0x00FF00) | (GM20 & 0xFF0000) >> 16;
 }
 else if (gm_lvl==2 && sd->status.sex==0) {
  WFIFOL(fd,8) = (GM40 & 0x0000FF) << 16 | (GM40 & 0x00FF00) | (GM40 & 0xFF0000) >> 16;
  }
 else if (gm_lvl >=3 && gm_lvl <= 79) {
	WFIFOL(fd,8) = (GM60 & 0x0000FF) << 16 | (GM60 & 0x00FF00) | (GM60 & 0xFF0000) >> 16;
  }
 else if (gm_lvl >=80 && gm_lvl <= 98) {
	WFIFOL(fd,8) = (GM80 & 0x0000FF) << 16 | (GM80 & 0x00FF00) | (GM80 & 0xFF0000) >> 16;
  }
safestrncpy((char*)WFIFOP(fd,12), 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);
// send back message to the speaker
if( is_fake ) {
 WFIFOW(fd,0) = 0x8e;
 WFIFOW(fd,2) = textlen + 4;
 safestrncpy((char*)WFIFOP(fd,4), fakename, textlen);
} else {
 memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
 WFIFOW(fd,0) = 0x8e;
 //WFIFOW(fd,0) = 0x2C1;
}
WFIFOSET(fd, WFIFOW(fd,2));

#ifdef PCRE_SUPPORT
// trigger listening npcs
map_foreachinrange(npc_chat_sub, &sd->bl, AREA_SIZE, BL_NPC, text, textlen, &sd->bl);
#endif
// Chat logging type 'O' / Global Chat
log_chat(LOG_CHAT_GLOBAL, 0, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, message);
return;
}

thanks

Link to comment
Share on other sites

9 answers to this question

Recommended Posts


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  37
  • Reputation:   11
  • Joined:  11/10/11
  • Last Seen:  

It's the "Custom chat color for global chat"?

Edito:

Veo que hablas español asi que mas facil..

Ya vi que si es el Custom chat color for global chat...

Lo adapte a Rathena... Testealo y me dices que tal te va (No tuve oportunidad de probarlo pero no me dio ningun error al compilar)

Clif.C

/// Validates and processes global messages
/// 008c <packet len>.W <text>.?B (<name> : <message>) 00 (CZ_REQUEST_CHAT)
/// There are various variants of this packet.
void clif_parse_GlobalMessage(int fd, struct map_session_data* sd)
{
const char* text = (char*)RFIFOP(fd,4);
int textlen = RFIFOW(fd,2) - 4;
int gm_lvl = pc_get_group_level(sd);
char *name, *message, *fakename = NULL;
int namelen, messagelen;
	 unsigned long player = strtoul("0x55AE3A",NULL,0); //normal player color leaf
unsigned long GM20 = strtoul("0xFFA500",NULL,0); //GM level 20 to 39 color orange
unsigned long GM40 = strtoul("0xCD00CD",NULL,0); //GM level 40 to 59 color magenta3
unsigned long GM60 = strtoul("0x006400",NULL,0); //GM level 60 to 79 color dark green
unsigned long GM80 = strtoul("0x00008B",NULL,0); //GM level 80 to 98 color dark blue
unsigned long admin = strtoul("0xFF0000",NULL,0); //Admin color red
bool is_fake;
// validate packet and retrieve name and message
if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) )
 return;
if( is_atcommand(fd, sd, message, 1)  )
 return;
if( sd->sc.data[sC_BERSERK] || (sd->sc.data[sC_NOCHAT] && sd->sc.data[sC_NOCHAT]->val1&MANNER_NOCHAT) )
 return;
if( battle_config.min_chat_delay )
{ //[skotlex]
 if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
  return;
 sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
}
/**
 * Fake Name Design by FatalEror (bug report #9)
 **/
if( ( is_fake = ( sd->fakename[0] ) ) ) {
 fakename = (char*) aMalloc(strlen(sd->fakename)+messagelen+3);
 strcpy(fakename, sd->fakename);
 strcat(fakename, " : ");
 strcat(fakename, message);
 textlen = strlen(fakename) + 1;
}
	// send message to others (using the send buffer for temp. storage)
	WFIFOHEAD(fd, 12 + textlen);
	WFIFOW(fd,0) = 0x2C1;
	WFIFOW(fd,2) = 12 + textlen;
	WFIFOL(fd,4) = sd->bl.id;
	if(gm_lvl == 99){
			WFIFOL(fd,8) = (admin & 0x0000FF) << 16 | (admin & 0x00FF00) | (admin & 0xFF0000) >> 16;
	}
	else if (gm_lvl==0){
			WFIFOL(fd,8) = (player & 0x0000FF) << 16 | (player & 0x00FF00) | (player & 0xFF0000) >> 16;
	}
else if (gm_lvl >=20 && gm_lvl<=39)
{
			WFIFOL(fd,8) = (GM20 & 0x0000FF) << 16 | (GM20 & 0x00FF00) | (GM20 & 0xFF0000) >> 16;
}
else if (gm_lvl >=40 && gm_lvl <= 59)
{
	WFIFOL(fd,8) = (GM40 & 0x0000FF) << 16 | (GM40 & 0x00FF00) | (GM40 & 0xFF0000) >> 16;
}
else if (gm_lvl >=60 && gm_lvl <= 79)
{
	WFIFOL(fd,8) = (GM60 & 0x0000FF) << 16 | (GM60 & 0x00FF00) | (GM60 & 0xFF0000) >> 16;
}
else if (gm_lvl >=80 && gm_lvl <= 98)
{
	WFIFOL(fd,8) = (GM80 & 0x0000FF) << 16 | (GM80 & 0x00FF00) | (GM80 & 0xFF0000) >> 16;
}
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);
// send back message to the speaker
if( is_fake ) {
 WFIFOW(fd,0) = 0x8e;
 WFIFOW(fd,2) = textlen + 4;
 safestrncpy((char*)WFIFOP(fd,4), fakename, textlen);
 aFree(fakename);
} else {
 memcpy(WFIFOP(fd,0), RFIFOP(fd,0), RFIFOW(fd,2));
 WFIFOW(fd,0) = 0x8e;
}
WFIFOSET(fd, WFIFOW(fd,2));
#ifdef PCRE_SUPPORT
// trigger listening npcs
map_foreachinrange(npc_chat_sub, &sd->bl, AREA_SIZE, BL_NPC, text, textlen, &sd->bl);
#endif
// Chat logging type 'O' / Global Chat
log_chat(LOG_CHAT_GLOBAL, 0, sd->status.char_id, sd->status.account_id, mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y, NULL, message);
}

Solo remplaza y listo

Saludos!

Edited by Tragedy
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  94
  • Topics Per Day:  0.02
  • Content Count:  2192
  • Reputation:   252
  • Joined:  11/11/11
  • Last Seen:  

Last time I checked, this was an English section.. What did you just say? ;S Did you fix the code?

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  29
  • Topics Per Day:  0.01
  • Content Count:  375
  • Reputation:   88
  • Joined:  12/30/11
  • Last Seen:  

@Tragedy, Thanks, I haven't tested it but I will and I will let you know if I have problems.

@Mysterious, I said It would be wonderful If I could leave the link where I have found it but I could not find it in eA forum.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  37
  • Reputation:   11
  • Joined:  11/10/11
  • Last Seen:  

Last time I checked, this was an English section.. What did you just say? ;S Did you fix the code?

Oh Srry! I forgot it >__<

@Alexandria Here is the eathena link (Using "Google Webcache") http://webcache.googleusercontent.com/search?q=cache:WfihHl9yDvwJ:www.eathena.ws/board/index.php%3Fshowtopic%3D278921+color+global+chat+eathena&cd=1&hl=es-419&ct=clnk&gl=mx

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  29
  • Topics Per Day:  0.01
  • Content Count:  375
  • Reputation:   88
  • Joined:  12/30/11
  • Last Seen:  

@Tragedy

It does not work. All colours are black. It does matter what level you are.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  37
  • Reputation:   11
  • Joined:  11/10/11
  • Last Seen:  

@Tragedy

It does not work. All colours are black. It does matter what level you are.

Black or white? o.O btw...

I'm gonna test the code

Regards

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  29
  • Topics Per Day:  0.01
  • Content Count:  375
  • Reputation:   88
  • Joined:  12/30/11
  • Last Seen:  

Sinttulo-1-3.png

@Tragedy, My name is shown as andria and not as Alexandria, it is not a red color, it is a green black color.

any help will be appreciated

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  17
  • Topics Per Day:  0.00
  • Content Count:  754
  • Reputation:   186
  • Joined:  05/22/12
  • Last Seen:  

Just for other's reference..this has been solved.. Here's the diff working in rathena.

GlobalMessagecolors_rathena16424.diff

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  4
  • Topics Per Day:  0.00
  • Content Count:  81
  • Reputation:   14
  • Joined:  08/17/12
  • Last Seen:  

nevermind i'm using rathena now xD

Edited by Yahiko
Link to comment
Share on other sites

Join the conversation

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

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

×
×
  • Create New...