Ajuda com OnPlayerText - Alfarr Heimrik - 23/06/2024
Bom dia.
Estou precisando de suporte para utilizar a quebra de linha e me dar uma luz quanto a logica, estou
quebrando a cabeça desde ontem, talvez seja algo simples.
Eu preciso arrumar isso ... Eu deveria ter usado switch, mas não sei bem como faz.
O código vai verificar se o player é admin ou civil, para ambos os casos a mensagem será enviada.
Aproveitei e pesquisei como fazer um sistema de quebra de linha, e me veio esse. Tem como diminuir esse código,
deixar ele mais prático?
Para cada level admin, eu preciso que o sistema de quebra de linha seja integrado. Como eu poderia fazer?
Código PHP: public OnPlayerText(playerid, text[]) { new String[128], String2[128], Message[128]; if(strlen(text) > 75) { if(Player[playerid][pAdmin] == 0) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } } else { if(Player[playerid][pAdmin] == 0) { format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); } return 0; } if(Player[playerid][pAdmin] == 0) { format(Message, sizeof(Message), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 1) { format(Message, sizeof(Message), "{FFFF00}[Ajudante] {CFCFCF}%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 2) { format(Message, sizeof(Message), "{00FF00}[Moderador] {CFCFCF}%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 3) { format(Message, sizeof(Message), "{FF0000}[Administrador] {CFCFCF}%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 4) { format(Message, sizeof(Message), "{FFA500}[Gerente] {CFCFCF}%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 5) { format(Message, sizeof(Message), "{0000FF}[Diretor] {CFCFCF}%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 6) { format(Message, sizeof(Message), "{4B0082}[Fundador] {CFCFCF}%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, Message, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } return 1; }
RE: Ajuda com OnPlayerText - White_Blue - 23/06/2024
Não entendi o objetivo desse código. O que você quer fazer é quebrar a string caso for grande demais?
RE: Ajuda com OnPlayerText - Alfarr Heimrik - 23/06/2024
(23/06/2024 12:20)White_Blue Escreveu: Não entendi o objetivo desse código. O que você quer fazer é quebrar a string caso for grande demais?
Como pode ver, eu estou usando esse sistema de tags-chat, eu queria saber se tem alguma forma de otimizar o código (diminuindo as linhas).
O sistema de ' quebra de linha ' foi algo que estava implementando, ai eu coloquei ele no post juntamente do código para que aquele que for me ajudar, me mostre como eu devo utilizar ele com o sistema de tag-chat mais otimizado.
Por exemplo: Tem como diminuir esse código? Parece até que estou programando java ... kkk
Código PHP: public OnPlayerText(playerid, text[]) { new String[128], String2[128], Message[128]; if(strlen(text) > 75) { if(Player[playerid][pAdmin] == 0) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 1) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 2) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 4) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 5) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 6) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } } return 1; }
RE: Ajuda com OnPlayerText - White_Blue - 23/06/2024
(23/06/2024 17:46)Alfarr Heimrik Escreveu: (23/06/2024 12:20)White_Blue Escreveu: Não entendi o objetivo desse código. O que você quer fazer é quebrar a string caso for grande demais?
Como pode ver, eu estou usando esse sistema de tags-chat, eu queria saber se tem alguma forma de otimizar o código (diminuindo as linhas).
O sistema de ' quebra de linha ' foi algo que estava implementando, ai eu coloquei ele no post juntamente do código para que aquele que for me ajudar, me mostre como eu devo utilizar ele com o sistema de tag-chat mais otimizado.
Por exemplo: Tem como diminuir esse código? Parece até que estou programando java ... kkk
Código PHP: public OnPlayerText(playerid, text[]) { new String[128], String2[128], Message[128]; if(strlen(text) > 75) { if(Player[playerid][pAdmin] == 0) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 1) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 2) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 4) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 5) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } if(Player[playerid][pAdmin] == 6) { format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); return 0; } } return 1; }
Nesse tipo de verificação, é melhor utilizar a estrutura condicional switch do que blocos de ifs, pois é mais rápido e organizado. Além disso, não é necessário retornar 0 em cada verificação, basta retornar 0 no final da callback.
e.g
Código PHP: public OnPlayerText(playerid, text[]) { switch(Player[playerid][pAdmin]) { case 1: { // Código para level 1 de admin } // ... default: { // Caso nenhuma das condições dos cases acima forem satisfeitas (caso o jogador não for um admin por exemplo), pulará para a cláusula default } } return 0; // Retorna 0 aqui para evitar duplicar as mensagens }
Mais informações: https://www.est.ufmg.br/~cristianocs/Pacotes2021/Aula4.pdf#Outline0.2.3.8
RE: Ajuda com OnPlayerText - Alfarr Heimrik - 23/06/2024
(23/06/2024 20:01)White_Blue Escreveu: (23/06/2024 17:46)Alfarr Heimrik Escreveu: Código PHP: public OnPlayerText(playerid, text[]) { .......
Nesse tipo de verificação, é melhor utilizar a estrutura condicional switch do que blocos de ifs, pois é mais rápido e organizado. Além disso, não é necessário retornar 0 em cada verificação, basta retornar 0 no final da callback.
e.g
Código PHP: public OnPlayerText(playerid, text[]) { ........
Mais informações: https://www.est.ufmg.br/~cristianocs/Pacotes2021/Aula4.pdf#Outline0.2.3.8
Então é assim que se usa switch ... Certo. Muito obrigado.
Para a quebra de linha, eu tenho que repetir o código em todas as condições?
Seria possível fazer só uma vez, e todo player que falar independente do cargo, ele seria atingido pela quebra de linha?
RE: Ajuda com OnPlayerText - BitSain - 24/06/2024
Foi mal ae, mas até agora não entendi essa quebra se linha que você tanto cita..
Se puder exemplificar eu fico grato
RE: Ajuda com OnPlayerText - Alfarr Heimrik - 24/06/2024
(24/06/2024 08:48)BitSain Escreveu: Foi mal ae, mas até agora não entendi essa quebra se linha que você tanto cita..
Se puder exemplificar eu fico grato
Ue, mas não é assim que se faz?
Código PHP: if(strlen(text) > 75){ format(String2, sizeof String2, text[75]); strdel(text, 75, 149); format(String, sizeof(String), "%s[%d]: %s", pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); ProxDetector(20.0, playerid, String2, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); }
RE: Ajuda com OnPlayerText - BitSain - 24/06/2024
Entendi o que você quer fazer.
Otimizei o código pra você além de também melhorar e corrigir a questão da quebra de linha.
Quando o texto tem um size maior que 75, ele quebra em 2 partes:
Código PHP: public OnPlayerText(playerid, text[]){ new String[128], textPart1[128], textPart2[128]; static const prefixos[7][64] = { "%s[%d]: %s", // Civil "{FFFF00}[Ajudante] {CFCFCF}%s[%d]: %s", // Ajudante "{00FF00}[Moderador] {CFCFCF}%s[%d]: %s", // Moderador "{FF0000}[Administrador] {CFCFCF}%s[%d]: %s", // Administrador "{FFA500}[Gerente] {CFCFCF}%s[%d]: %s", // Gerente "{0000FF}[Diretor] {CFCFCF}%s[%d]: %s", // Diretor "{4B0082}[Fundador] {CFCFCF}%s[%d]: %s" // Fundador };
if(strlen(text) > 75) { strmid(textPart1, text, 0, 75, sizeof(textPart1)); strmid(textPart2, text, 75, strlen(text), sizeof(textPart2)); format(String, sizeof(String), prefixos[Player[playerid][pAdmin]], pName(playerid), playerid, textPart1); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); format(String, sizeof(String), prefixos[Player[playerid][pAdmin]], pName(playerid), playerid, textPart2); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); } else { format(String, sizeof(String), prefixos[Player[playerid][pAdmin]], pName(playerid), playerid, text); ProxDetector(20.0, playerid, String, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY, COLOR_GREY); } return false; //true envia a mensagem global do samp. False desativa isso }
(Se eu não me engano, o samp já faz a quebra de linha automaticamente, sem a necessidade de criar essa observação ao enviar a mensagem.
Outra coisa é que, por exemplo, se a posição 70-76 for uma palavra, a 76 seria a part2 que seria a última letra da palavra, e com isso, em algumas ocasiões dependendo do "text" seria enviado uma unica palavra no chat do jogador, onde seria viável completar a palavra na part1
Tipo:
Texto original: ola meu nome é BitSain
Suponhamos que o texto original tenha um size > 75:
Part1: ola meu nome é BitSai
Part2: n
)
RE: Ajuda com OnPlayerText - Alfarr Heimrik - 24/06/2024
(24/06/2024 12:37)BitSain Escreveu: Entendi o que você quer fazer.
Otimizei o código pra você além de também melhorar e corrigir a questão da quebra de linha.
Quando o texto tem um size maior que 75, ele quebra em 2 partes:
Entendi. Vou estudar essas funções. Obrigado pelo conteúdo.
|