[FilterScript] Profissгo De Caminhoneiro 2.0!!
#1

Realizando melhorias no cуdigo sera feito um novo FS melhorado em breve
Reply
#2

nice assinatura que polui removida-
Reply
#3

Parabйn! Absorveu as ideias de melhoramento da primeira versгo e aplicou na segunda, continue assim e sempre melhorando. Em relaзгo ao tуpico era sу atualizar o antigo, fica a dica.
(continue evoluindo. crie um sistema de admins para novatos da prуxima )
Reply
#4

Quote:
Originally Posted by NobiZinhoBR
Посмотреть сообщение
Parabйn! Absorveu as ideias de melhoramento da primeira versгo e aplicou na segunda, continue assim e sempre melhorando. Em relaзгo ao tуpico era sу atualizar o antigo, fica a dica.
(continue evoluindo. crie um sistema de admins para novatos da prуxima )
sim mais o outro ja tava muito poluido e com tretas kkk agora irei atualizar pelo changelog as versхes ... , na proxima pretendo fazer sem comando /carregar tudo por checkpoint e um sistema de bonus no salario e tipo ao completar 10 entregas ele ganhava bonus =3 , esse sistema de admins vocк fala um novo comando para logar , comandos novo para se aplicar vocк diz ? vlw pela ideia vou fazer =3
Reply
#5

PHP код:
public OnPlayerConnect(playerid)
{
       
/* ... */
    //SISTEMA DE SALARIO
    
SetTimerEx("ponto"1799000true"i"playerid);
    
SetTimerEx("salario"1800000true"i"playerid);
     new 
str[128]; new NAME[128];
    new 
prof;
    
GetPlayerName(playerid,NAME,128);
    
format(strsizeof(str),"/caravana/%s.ini"NAME);
    
prof DOF2_GetInt(str"profissao");
    
profissao[playerid] = prof;
    return 
1;

Vocк esta setando dois timers para serem chamados mais de uma vez, toda vez que um jogador entrar dois timer sгo setados mas nгo sгo deletados na hora que o jogador sai do servidor. Use a funзгo KillTimer e uma array 2d para armazenar o id dos timer e profissгo o jogador vocк pode usar um enumerador para organizar caso queira.

PHP код:
enum pinfo{
    
profissao,
    
timers[2]
}
new 
pData[MAX_PLAYERS][pinfo];
//exemplo:
pData[playerid][profissao] = 1;
pData[playerid][timers][0] = SetTimer
//Ou
#define PROFISSAO 0
#define TIMER1 1
#define TIMER2 2
new pData[MAX_PLAYERS][3];
pData[playerid][PROFISSAO] = 1
Olhe os limites do sa-mp, nгo й possнvel ter um nick com 127 caracteres no sa-mp, como o limite й 24 caracteres vocк esta jogando 104 cйlulas fora.

E a formataзгo para o local do arquivo com o nome do jogador nгo vai precisar mais do que 38 cйlulas, entгo nisso ai vocк esta jogando 194 cйlulas fora.

Qual a necessidade da variбvel prof? vocк esta apenas desperdiзando memoria.

PHP код:
profissao[playerid] = DOF2_GetInt(str"profissao"); 
PHP код:
public OnPlayerDisconnect(playeridreason)
{
    new 
str[24]; new NAME[26];
    
GetPlayerName(playerid,NAME,26);
    
format(strsizeof(str),"/caravana/%s.ini"NAME);
    
DOF2_CreateFile(str);
    
DOF2_SetInt(str"profissao"profissao[playerid]);
    
DOF2_SaveFile();
    return 
1;

A array str nгo vai conseguir formatar o caminho completo para o arquivo jб que nгo tem cйlulas o suficiente para fazer a formataзгo mбxima, e a array NAME vai conseguir armazenar todo o nome do jogador mas esta usando duas cйlulas a mais do que o necessбrio (MAX_PLAYER_NAME й definido por 24 que й o limite do nome do jogador).

Outro problema й que toda vez que um jogador desconecta vocк tentar criar um arquivo mesmo que ele exista, ao jogador conectar verifique se o arquivo existe caso nгo exista crie o arquivo.

PHP код:
public OnPlayerSpawn(playerid)
{
    if(
profissao[playerid] != caminhoneiro) return profissao[playerid] = novato SetPlayerColor(playeridbranco);
    if(
profissao[playerid] == caminhoneiro) return SetPlayerColor(playeridcinza);
    return 
1;

Pra que duas verificaзхes?

Basta verificar se profissao й igual a definiзгo de caminhoneiro e fazer algo caso nгo seja fazer outra coisa.

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == carregamento)
    {
        switch(
listitem)
        {
             case 
0:
            {
                  new 
rota1 1;
                
SetPlayerMapIcon(playeridrota1, -1299.17852707.741550.0625240MAPICON_GLOBAL);
                
SetPlayerCheckpoint(playerid, -1299.17852707.741550.062510.0);
                 
SendClientMessage(playerid, -1"{00FF00}Cargueiro carregado!!!");
                 
SendClientMessage(playerid, -1"{00FF00}Foi marcado em seu mapa o local de descarregamento.");
                
ROTAp[playerid] = 1;
            }
        }
    }
    return 
1;

Qual a necessidade de usar a variбvel rota1 e armazenar o valor 1 pra depois esse valor ser passado na funзгo SetPlayerMapIcon?


PHP код:
CMD:caminhoneiro(playeridparams[])
{
    new 
jogador;
    new 
ajog[25], pjog [25];
    
GetPlayerName(jogadorajogsizeof(ajog));
    
GetPlayerName(playeridpjogsizeof(pjog));
    if(!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1"{FF0000}Vocк nгo й admin!");
    if(
sscanf(params"d"jogador)) return SendClientMessage(playerid, -1"{FF0000}Uso Correto: /caminhoneiro [id]");
    if(!
IsPlayerConnected(jogador)) return SendClientMessage(playerid, -1"{FF0000} jogador nгo conectado.");
    
SendClientMessage(jogador, -1"{00FF00}Algum admin te colocou na profissao de caminhoneiro.");
    
SendClientMessage(playerid, -1"{FF0000}Vocк deu profissгo de caminhoneiro para o jogador.");
    
profissao[jogador] = caminhoneiro;
    
SetPlayerColor(jogadorcinza);
    return 
1;

Vocк criou duas arrays ajog e pjog e pegou o nome do jogador que digitou o comando e do id 0 (pois quando й declarada uma variбvel o seu valor inicial й 0 e nгo o lixo eletrфnico igual acontece em C/C++. Depois de pegar esses nome vocк nгo usou essas duas arrays.

Recomendo vocк declare a variбvel jogador declare ela depois da verificaзгo se o jogador esta logado na RCON.

PHP код:
CMD:cp(playeridparams[])
{
    new 
string[128], Texto[200];
    if(
sscanf(params"s[128]"string)) return SendClientMessage(playerid, -1"{00FF00}Uso correto: /cp [Mensagem]");
    if(
profissao[playerid] != caminhoneiro) return SendClientMessage(playerid, -1"{FF0000}Civis nгo tem chat prуprio");
    new 
nome[MAX_PLAYER_NAME];
    
GetPlayerName(playeridnomesizeof(nome));
    
format(Texto128"{999999}I Chat-Profissгo I %s diz: %s"nomestring);
    for(new 
iTrucker GetMaxPlayers();  Truckeri++)
    {
        if(!
IsPlayerConnected(i)) continue;
        if(
profissao[i] == caminhoneiro || profissao[playerid] == caminhoneiro)
        {
            
SendClientMessage(i, -1Texto);
        }
    }
    return 
1;

Nesse comando vocк seta o limite da mensagem para 128 cйlulas, mas isso nгo й possнvel pois o limite da entrada de textos no sa-mp й de 128, entгo seria 2 caracteres do comando mais a barra mais um espaзo para mensagem somando o uso de 4 caracteres e limitando a mensagem passada para 123 caracteres mais o EOS (End of String). E o limite da saнda й de 144 entгo vocк nгo vai conseguir mandar uma mensagem de 123 caracteres e vocк esta desperdiзando 35 cйlulas.


Recomendo vocк fazer a verificaзгo se profissao nгo й igual a caminhoneiro antes da verificaзгo do sscanf.

PHP код:
for(new iTrucker GetMaxPlayers();  Truckeri++) 
Recomendo utilizar a funзгo GetPlayerPoolSize pois ela retorna o id mais alto online.

PHP код:
for(new iTrucker GetPlayerPoolSize();  <= Truckeri++) 
PHP код:
if(profissao[i] == caminhoneiro || profissao[playerid] == caminhoneiro
Traduzindo esta condiзгo:
Код:
Se (profissao[i] for igual a caminhoneiro OU profissao[playerid] for igual a caminhoneiro)
Resumindo ele vai enviar a mensagem para todos os jogadores online, pois uma das duas condiзхes tem que ser verdadeiras e a segunda sempre vai ser.


PHP код:
CMD:profissao(playeridparams[])
{
    if(
profissao[playerid] == caminhoneiro)
    {
        
#define DialogBoxEx 2000
        
new str[500];
        
format(strsizeof(str), "{FF0000}quer falar com outros da profissгo? /cp\n{ff0000}quer cancelar a rota ? /cancelar\n{ff0000}se perdeu ? /local\n\n{66ff66}1- Engate um cargueiro no seu caminhгo\n{ffff00}2- De {ff0000}/carregar {ffff00}e siga o icone de caminhгo no mapa\n{66ffff}3- Se estiver la de {ff0000}/carregar {66ffff}novamente\n{ff9900}4- Escolha uma rota"playerid);
        
ShowPlayerDialog(playeridDialogBoxExDIALOG_STYLE_MSGBOX"Como Trabalhar"str"Entendi""");
    }
    if(
profissao[playerid] == novato)
    {
        
SendClientMessage(playerid, -1"{FF0000}Vocк nгo trabalha pegue outra profissгo!");
    }
    return 
1;

Qual a necessidade de definir DialogBoxEx dentro da callback do comando? Vocк usou uma array para formatar e declarou com 500 cйlulas mas a string tem no mбximo 337 caracteres e vocк nem formatou nada.


Nгo entendi qual й o motivo do uso da array pVez.




Antes de criar sistemas e postar no fуrum recomendo vocк aprender o bбsico da linguagem pawn.

Alguns tutoriais:

Operadores. Teуrico & Prбtico
Variбveis - Definiзгo, uso e tipos
Usando e Manipulando Arrays
Pawn Strings
Enumeradores (Em Inglкs)
Loops
Videos sobre blocos de instruзгo I (Й em C mas se aplica em pawn)
Videos sobre blocos de instruзгo II (Й em C mas se aplica em pawn)


Lista de vнdeo aulas
Lista de tutoriais
Reply
#6

nem vou mandar comentario em cima do seu para nгo poluir o tуpico a pVEZ? ela serve para mandar a mensagem de auxilio quando o player entrar no caminhгo somente 1 vez e nгo ficar repetindo seria muito chato a cada vez que o player conectar e entrar num caminhгo manda aquela mensagem e nгo toda vez que ele descer e subir entendeu ? agora vou ler o resto porque krl tu achou muita coisa '-'
Reply
#7

Todos os bugs apontados pelo multikill resolvidos versгo 2.1
Reply
#8

Quote:
Originally Posted by WoozieBRz
Посмотреть сообщение
nem vou mandar comentario em cima do seu para nгo poluir o tуpico
cara sйrio, para de frescura sobre essa coisa de " poluir o tуpico "
vocк mesmo polui, usando aquelas cores fortes, e comentando a cada coisa q tu fez
" ex: genti acabei de jogar gta v "
tem o botгo editar
~~~~~~~~

Код:
new pVEZ[MAX_PLAYERS], ROTAp[MAX_PLAYERS], profissao[MAX_PLAYERS] , local[MAX_PLAYERS] , matartempo[MAX_PLAYERS];
bom.. sobre isso й + prбtico vocк usar uma Enum ( enumerador )
pois como cк pode ver, estб usando muito " MAX_PLAYERS " pra cada vгriбvel

~~~~~~~~~

pensei q eu tava jogando CVR cara, ta bem parecido ..
mas a ideia foi boa, versгo 2.1 estб muito boa cara,
parabens!
Reply
#9

Quote:
Originally Posted by KinG7
Посмотреть сообщение
pensei q eu tava jogando CVR cara, ta bem parecido ..
mas a ideia foi boa, versгo 2.1 estб muito boa cara,
parabens!
kkkkk te falar que usei la de exemplo o budega falou que nгo tinha problema o william nгo liga para coisas pequenas assim , qual seu nick e lvl la ?? , mais esse fs vai ser mais completo que o de la e vai ter rotas vips la nem pode escolher rota :v invйs de ser igual o deles o meu vai ter no comeзo do dialog rotas vips vocк clica se for da classe vip
vai aparecer outras rotas que ganham mais e vai ter bonus e muito mais coisa e.e
Reply
#10

Ta bem melhor que antes, nгo vou encher de coisa que da para fazer pois sei que й um iniciante e tem que ir aos poucos, sу achei meio estranho usar streamer, nгo й necessбrio nгo tem nem 100 objects .
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)