[FilterScript] Private Messages System
#1

Bem, sei que hб muitos scripts do gкnero nesta board, mas como nгo hб regras contra isso, estarei postando aqui meu sistema de mensagens privadas, posto que tenho visto muitos sistemas iguais, fiz este sistema que funciona tanto em dialogs, ou com comandos, o dialog, aparece ao clicar no nome de um jogador. Exibindo um DIALOG_STYLE_LIST com as opзхes: Enviar PM - Bloquear PM - Desbloquear PM, funзхes que podem ser executadas tambйm atravйs de comandos, sгo eles: /pm, /blockpm, /desblockpm.

O sistema utiliza ZCMD e sscanf.

Bem, chega de blб blб blб.


Source:

pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

const DIALOG_MENU_PM = 1;
const DIALOG_SEND_PM = 2;

new
    bool: blockPM [ MAX_PLAYERS ] [ MAX_PLAYERS ];
   
public OnPlayerClickPlayer ( playerid , clickedplayerid , source ) {
    new
        name [ MAX_PLAYER_NAME ],
        str[ 100 ];

    SetPVarInt ( playerid , "clickedplayerid" , clickedplayerid );
    GetPlayerName( clickedplayerid , name , sizeof name );
    format ( str , sizeof ( str ) , "Enviar PM para %s\nBloquear PM's de %s\nDesbloquear PM's de %s" , name , name , name );
    ShowPlayerDialog ( playerid , DIALOG_MENU_PM , DIALOG_STYLE_LIST , "{FFFFFF}Menu: Mensagens Particulares" , str , "Selecionar", "Cancelar" );
    return 1;
}

public OnDialogResponse ( playerid , dialogid , response , listitem , inputtext [ ] ) {
    new
        str [ 100 ],
        name [ 24 ];
       
    switch ( dialogid ) {
        case DIALOG_MENU_PM: {
            if ( !response ) {
                SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID );
            }
            else {
                switch ( listitem ) {
                    case 0: {
                        GetPlayerName ( GetPVarInt ( playerid , "clickedplayerid" ) , name , sizeof name );
                        format ( str , sizeof str , "{FFFFFF}Digite abaixo a mensagem a ser enviada para {0000FF}%s" , name );
                        ShowPlayerDialog ( playerid , DIALOG_SEND_PM , DIALOG_STYLE_INPUT , "{FFFFFF}Enviar mensagem particular" , str , "Enviar" , "Cancelar" );
                    }
                    case 1: {
                        format ( str , 4 , "%i" , GetPVarInt ( playerid , "clickedplayerid" ) );
                        cmd_blockpm ( playerid , str );
                        SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID );
                    }
                    case 2: {
                        format ( str , 4 , "%i" , GetPVarInt ( playerid , "clickedplayerid" ) );
                        cmd_desblockpm ( playerid , str );
                        SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID );
                    }
                }
            }
        }
        case DIALOG_SEND_PM: {
            if ( !response ) {
                SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID );
            }
            else {
                format ( str , 100 , "%i %s" , GetPVarInt ( playerid , "clickedplayerid" ) , inputtext );
                cmd_pm ( playerid , str );
                SetPVarInt ( playerid , "clickedplayerid", INVALID_PLAYER_ID );
            }
        }
    }
    return 1;
}
   
CMD:pm( playerid , params [ ] ) {
    new
        playerID,
        pmText [ 90 ],
        str [ 128 ],
        name [ 24 ];
       
    if ( sscanf ( params , "us[90]" , playerID , pmText ) )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "Use /PM [ID/Nome] [Texto]" );
    if ( !IsPlayerConnected ( playerID  ) )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "Jogador inativo.");
    if ( playerID == INVALID_PLAYER_ID )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "ID Invбlido." );
    if ( blockPM [ playerID ] [ playerid ] )
        return SendClientMessage ( playerid , 0xE31919FF , "Este jogador bloqueou mensagens particulares suas." );

    GetPlayerName ( playerid , name , sizeof name );
    format ( str , sizeof ( str ) , "PM de %s: %s" , name , pmText );
    SendClientMessage ( playerID , 0xF6F600FF , str );
    SendClientMessage ( playerid , 0xF6F600FF , "Mensagem particular enviada." );
    return true;
}

CMD:blockpm ( playerid , params [ ] ) {
    new
        playerID,
        str [ 90 ],
        name [ 24 ];
       
    if ( sscanf ( params , "u" , playerID ) )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "Use /blockpm [ID/Nome]" );
    if ( !IsPlayerConnected ( playerID  ) )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "Jogador inativo.");
    if ( playerID == INVALID_PLAYER_ID )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "ID Invбlido." );
    if ( blockPM [ playerid ] [ playerID ] )
        return SendClientMessage ( playerid , 0xE31919FF , "Vocк jб bloqueou mensagens particulares deste jogador." );

    blockPM [ playerid ] [ playerID ] = true;
    GetPlayerName ( playerID , name , sizeof ( name ) );
    format ( str , sizeof ( str ) , "Mensagens particulares de %s bloqueadas!" , name );
    SendClientMessage ( playerid , 0x00CD00FF , str );
    GetPlayerName ( playerid , name , sizeof ( name ) );
    format ( str , sizeof ( str ) , "O jogador %s bloqueou suas mensagens particulares." , name );
    SendClientMessage ( playerID , 0xE31919FF , str );
    return 1;
}

CMD:desblockpm ( playerid , params [ ] ) {
    new
        playerID,
        str [ 90 ],
        name [ 24 ];

    if ( sscanf ( params , "u" , playerID ) )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "Use /blockpm [ID/Nome]" );
    if ( !IsPlayerConnected ( playerID  ) )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "Jogador inativo.");
    if ( playerID == INVALID_PLAYER_ID )
        return SendClientMessage ( playerid , 0xFFFFFFFF , "ID Invбlido." );
    if ( !blockPM [ playerid ] [ playerID ] )
        return SendClientMessage ( playerid , 0xE31919FF , "Vocк nгo bloqueou mensagens particulares deste jogador." );

    blockPM [ playerid ] [ playerID ] = false;
    GetPlayerName ( playerID , name , sizeof ( name ) );
    format ( str , sizeof ( str ) , "Mensagens particulares de %s desbloqueadas!" , name );
    SendClientMessage ( playerid , 0x00CD00FF , str );
    GetPlayerName ( playerid , name , sizeof ( name ) );
    format ( str , sizeof ( str ) , "O jogador %s desbloqueou suas mensagens particulares." , name );
    SendClientMessage ( playerID , 0xE31919FF , str );
    return 1;
}

Crйditos:

SA:MP Team
Zeex: ZCMD
******: sscanf
Eu: Desenvolvimento do script.

DOWNLOAD

Espero que gostem, e principalmente que seja ъtil para alguйm
Reply
#2

Уtimo filterscript.
Eu estava a desenvolver um do mesmo tipo, mas agora, hehe.
Reply
#3

Quote:
Originally Posted by Đeagle
Посмотреть сообщение
Уtimo filterscript.
Eu estava a desenvolver um do mesmo tipo, mas agora, hehe.
Obrigado
Reply
#4

Legal, mas vocк sabia que a cada espaзo que vocк utiliza no script equivale а um underline? " _ "
pawn Код:
public OnPlayerClickPlayer ( playerid , clickedplayerid , source ) {
//й igual а:
public_OnPlayerClickPlayer_(_playerid_,_clickedplayerid_,_source_)_{
Isso aumenta o nъmero de bytes no amx.
Mas de qualquer forma, parabйns.
Reply
#5

Quote:
Originally Posted by AFerreira
Посмотреть сообщение
Legal, mas vocк sabia que a cada espaзo que vocк utiliza no script equivale а um underline? " _ "
pawn Код:
public OnPlayerClickPlayer ( playerid , clickedplayerid , source ) {
//й igual а:
public_OnPlayerClickPlayer_(_playerid_,_clickedplayerid_,_source_)_{
Isso aumenta o nъmero de bytes no amx.
Mas de qualquer forma, parabйns.
Pois enganas-te redondamente jб sei que foste tu que inventaste isso pois tenho eu a certeza que o pre-processor elimina todos espaзos, entao vejamos ha pessoas que nao fazem identaзao com TAB mas sim com espaзos, nesse caso entao iria bugar porque primeiro iria por o underline antes das variaveis fazendo elas mudarem de nome e passarem assim a dar erros em certas partes do script segundo porque simplesmente ia meter um GM cheio de underlines? Isso nгo faz sentido nenhum...

Nгo percebo de onde voces vao buscar essas ideias...

Mas sim й verdade que diminui o tamanho no .amx porйm voces e sim tou-me a direcionar aos brasileiros, tem quase todos a mania de pensar que o tamanho do AMX influencia na otimizaзгo do servidor porem nem sempre й verdade este й um dos casos..
Reply
#6

Quote:
Originally Posted by SlashPT
Посмотреть сообщение
Pois enganas-te redondamente jб sei que foste tu que inventaste isso pois tenho eu a certeza que o pre-processor elimina todos espaзos, entao vejamos ha pessoas que nao fazem identaзao com TAB mas sim com espaзos, nesse caso entao iria bugar porque primeiro iria por o underline antes das variaveis fazendo elas mudarem de nome e passarem assim a dar erros em certas partes do script segundo porque simplesmente ia meter um GM cheio de underlines? Isso nгo faz sentido nenhum...

Nгo percebo de onde voces vao buscar essas ideias...

Mas sim й verdade que diminui o tamanho no .amx porйm voces e sim tou-me a direcionar aos brasileiros, tem quase todos a mania de pensar que o tamanho do AMX influencia na otimizaзгo do servidor porem nem sempre й verdade este й um dos casos..
Se eu estiver enganado, meu compilador estб com problemas sйrios.
Pois jб fiz um teste contra isso e deu no resultado que postei.
Embora eu nгo esteja dizendo que o amx influencia na otimizaзгo, em alguns casos sim ele influencia em outros nгo.
Foi apenas uma dica, as pessoas programam seus cуdigos do jeito que elas bem entenderem, nгo estou dizendo que sу por causa daquilo, ninguйm pode usar espaзos em seus scripts.
Vocкs tem que saber diferenciar dica de obrigaзгo.
Mas de qualquer forma, se eu ou vocк estiver certo, assunto encerrado.
Reply
#7

Quote:
Originally Posted by AFerreira
Посмотреть сообщение
Se eu estiver enganado, meu compilador estб com problemas sйrios.
Pois jб fiz um teste contra isso e deu no resultado que postei.
Embora eu nгo esteja dizendo que o amx influencia na otimizaзгo, em alguns casos sim ele influencia em outros nгo.
Foi apenas uma dica, as pessoas programam seus cуdigos do jeito que elas bem entenderem, nгo estou dizendo que sу por causa daquilo, ninguйm pode usar espaзos em seus scripts.
Vocкs tem que saber diferenciar dica de obrigaзгo.
Mas de qualquer forma, se eu ou vocк estiver certo, assunto encerrado.
Nгo nгo isto nгo й assim assunto encerrado e tб a andar, diga-me lб como fez os seus testes para verificar isso pois tambйm quero testar...
Reply
#8

Quote:
Originally Posted by SlashPT
Посмотреть сообщение
Nгo nгo isto nгo й assim assunto encerrado e tб a andar, diga-me lб como fez os seus testes para verificar isso pois tambйm quero testar...
Porque quer dar continuidade a uma coisa estъpida como esta?
O teste eu nгo possuo mais, se eu estivesse com os mesmos postaria aqui.
Se eu lembrar-me da forma que eu fiz, edito este post.
Аlias nгo й sу eu que jб reparei nisso, em algum tуpico nessa board jб vi pessoas dizendo o mesmo.
Reply
#9

Quote:
Originally Posted by SlashPT
Посмотреть сообщение
Pois enganas-te redondamente jб sei que foste tu que inventaste isso pois tenho eu a certeza que o pre-processor elimina todos espaзos, entao vejamos ha pessoas que nao fazem identaзao com TAB mas sim com espaзos, nesse caso entao iria bugar porque primeiro iria por o underline antes das variaveis fazendo elas mudarem de nome e passarem assim a dar erros em certas partes do script segundo porque simplesmente ia meter um GM cheio de underlines? Isso nгo faz sentido nenhum.
Nгo percebo de onde voces vao buscar essas ideias...

Mas sim й verdade que diminui o tamanho no .amx porйm voces e sim tou-me a direcionar aos brasileiros, tem quase todos a mania de pensar que o tamanho do AMX influencia na otimizaзгo do servidor porem nem sempre й verdade este й um dos casos..
Antes de falar dos brasileiros em geral acho melhor comeзar a medir suas palavras por que aqui temos leis contra discriminaзгo, seja ela por raca ou nacionalidade.

Vocк falar isso й a mesma coisa que eu falar que TODOS os portugueses sгo burros por causa de alguns q vieram aqui, desmataram tudo й nao replantaram nada.
Reply
#10

Quote:
Originally Posted by Lucas_Alemao
Посмотреть сообщение
Antes de falar dos brasileiros em geral acho melhor comeзar a medir suas palavras por que aqui temos leis contra discriminaзгo, seja ela por raca ou nacionalidade.

Vocк falar isso й a mesma coisa que eu falar que TODOS os portugueses sгo burros por causa de alguns q vieram aqui, desmataram tudo й nao replantaram nada.
Primeiro nгo te insultei pois nгo? Espero que o moderador comece a tomar medidas...
Segundo, falo isso pois em lado NENHUM deste forum dizem sempre coisas como chegam a ser ditas aqui, uma dessas coisas й isso de o AMX quanto for maior menos optimizado estб.
Terceiro, os portugueses nao foram burros muito pelo contrario atй foram mais inteligentes que os brasileiros pois eles fizeram o que quiseram do brasil e mandaram nele, quando nao precisaram mais abandonaram, simples eu faria o mesmo, eles "desmataram" tudo para seu proveito por isso....

Edit: E quarto se a carapuзa te serviu que fique bem com ela ^^
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)