galera minha conce ela cria os vehiculo certinho so que ela nao estabelece um dono do vehiculo tipo qualquer pessoa pode usar o vehiculo como posso fazer para aquele vehiculo especifico ter um dono para eu fazer a comfirmaçao usando if se a pessoa que entro no carro e dono ou nao do vehiculo sei que tem como pegar o id especifico do carro pra fazer essa comparaçao mais esqueci como faz
Galera fiz um comando de estacionar carros e coloquei o codico de criar o carro na call OnPlayerConnect porem toda vez que player respawna cria um carro novo ja tentei colocar na call OnPlayerConnect mais nem cria o carro oque devo fazer para criar o ccarro 1 vez so?
Ola, primeiramente bom dia, boa tarde e boa noite!
Seguindo topico abaixo, eu preciso de ajuda em alterar a funçao de um determinado botao no meu codigo fonte, porem nao tenho a minima ideia de como fazer isso:
Basicamente eu quero fazer o seguinte, ao apertar em um botao "DB" ative o driveby ou desative se ja estiver ativado.
Quem puder me ajudar eu agradeço de coração, deixo uma imagem abaixo para auxiliar a entender o texto!
Aquele famoso tempo parado, quando o GM, o HOST ou o PLAYER da uma lagadinha...
Nunca tive que lidar com isso até o SAMP ANDROID, a galera tem muitos problemas de conexão, seja por 4G ou WIFI OSCILANDO...
Agora sem o forum antigo não tenho material (exemplos de uso reais) pra ver como a galera lida com isso, mas lembro de ver na wiki umas funções de conexão
Vocês de alguma forma conseguem resincronizar os players que lagam?
O máximo que eu consegui foi kickar os players de tempo parado, mas isso tá me fazendo perder boa parte dos players de celular
Código:
new PacketAltoAvisos[MAX_PLAYERS];
OnPlayerUpdate
Código:
new Float:Pocket;
GetPlayerPacketloss(playerid,Pocket);
if(Pocket >= 10.0)
{
PacketAltoAvisos[playerid] ++;
if(PacketAltoAvisos[playerid] >= 30)
{
new PlayerIP[20];
GetPlayerIp(playerid, PlayerIP, sizeof PlayerIP);
if(idiom[playerid] == 1) SendClientMessage(playerid, -1, "Você foi desconectado por 3 min estar dessincronizado (Relogio Travado) para evitar problemas. Ajuste sua conexão!");
else if(idiom[playerid] == 2) SendClientMessage(playerid, -1, "You have been disconnected for 3 min because you are out of sync (Clock Locked) to avoid problems. Adjust your connection!");
else if(idiom[playerid] == 3) SendClientMessage(playerid, -1, "Se ha desconectado por 3 min porque no está sincronizado (Reloj Bloqueado) para evitar problemas. ¡Ajusta tu conexión!");
BlockIpAddress(PlayerIP, 3 * 60 * 1000);
}
}
Código:
stock GetPlayerPacketloss(playerid,&Float:packetloss)
{
/* Returns the packetloss percentage of the given playerid - Made by Fusez */
if(!IsPlayerConnected(playerid)) return 0;
new nstats[400+1], nstats_loss[20], start, end;
GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));
start = strfind(nstats,"packetloss",true);
end = strfind(nstats,"%",true,start);
[debug] Run time error 4: "Array index out of bounds"
[debug] Accessing element at index 375831900 past array upper bound 1000
[debug] AMX backtrace:
[debug] #0 0034b370 in ?? (1, 869072810, 387008444, 367466648, 375831900) from gm.amx
[debug] #1 0058f5a0 in public dialog_DutyMenu (0, 1, 0, 387658312) from gm.amx
[debug] #2 native CallLocalFunction () from samp-server.exe
[debug] #3 0001e534 in public OnDialogResponse (0, 32700, 1, 0, 387658240) from gm.amx
Acho que o problema está aqui, mas não consigo identificar, código abaixo.
Código:
Dialog:DutyMenu(playerid, response, listitem, inputtext[])
{
if (!response) return 1;
new faction = PlayerInfo[playerid][pFaction];
if (faction == 0 || !IsFactionLegal(faction)) return 1;
switch(listitem)
{
case 0://duty
{
if (CheckAdmin(playerid, ADMIN_LEVEL_1)) return SendErrorMessage(playerid, "Você tem que sair do serviço administrativo.");
if (pTemp[playerid][pTaser]) return SendErrorMessage(playerid, "Você precisa remover a taser.");
if (pTemp[playerid][pPatrol]) return SendErrorMessage(playerid, "Você tem que sair da patrulha (/callsign).");
if (!IsPlayerAtUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
if (!PlayerInfo[playerid][pOnDuty])
{
if (PlayerInfo[playerid][pPlayerWeapon])
{
if (CheckInv(playerid)) cmd::putgun(playerid, "");
else return SendErrorMessage(playerid, "Coloque as armas no inventário primeiro.");
}
SetPVarInt(playerid, #pDelay, 1);
new count;
for(new i; i < MAX_INV_SLOTS; i++)
{
if (inventory_items[Inventory[playerid][i][pInvItem]][itemType] != ITEM_TYPE_WEAPON &&
inventory_items[Inventory[playerid][i][pInvItem]][itemType] != ITEM_TYPE_AMMO) continue;
SetPVarInt(playerid, #pDelay, 0);
SendAdmMessage("%s tem um grande número de armas no inventário. [AVISO]", GetNameEx(playerid));
return SendErrorMessage(playerid, "Você tem muitas armas/munições! (Você só pode colocar em uma gaveta: 5 Itens)");
}
if (IsFactionPolice(faction))
{
SendNearbyMessage(Range_Normal, playerid, COLOR_PURPLE, "%s %s pegou seu distintivo em seu armário.", GetRankName(playerid), GetNameWithMask(playerid));
}
if (IsPlayerAttachedObjectSlotUsed(playerid, 5)) RemovePlayerAttachedObject(playerid, 5);
if (IsPlayerAttachedObjectSlotUsed(playerid, 6)) RemovePlayerAttachedObject(playerid, 6);
if (IsPlayerAttachedObjectSlotUsed(playerid, 7)) RemovePlayerAttachedObject(playerid, 7);
new copsitems = 0, playersitems = 0;
for(new i = 0; i < MAX_INV_SLOTS; i++)
{
if (i < MAX_COP_SLOTS) if (PlayerInfo[playerid][pCopItem][i]) copsitems++;
if (!Inventory[playerid][i][pInvItem]) playersitems++;
}
if (playersitems - copsitems >= 0)
{
for(new i = 0; i < MAX_COP_SLOTS; i++)
{
if (PlayerInfo[playerid][pCopItem][i])
{
new slotid = GetInvNextSlot(playerid);
if (slotid == -1) continue;
PlayerInfo[playerid][pCopItem][i] = 0;
PlayerInfo[playerid][pCopQ][i] = 0;
PlayerInfo[playerid][pCopEx][i] = 0;
PlayerInfo[playerid][pCopS][i] = 0;
}
}
else return SendErrorMessage(playerid, "Você não pode tirar nada de seu armário, seu inventário está cheio.");
if (IsFactionPolice(faction))
{
SendNearbyMessage(Range_Normal, playerid, COLOR_PURPLE, "%s %s coloca seu distintívo no armário", GetRankName(playerid), GetNameWithMask(playerid));
}
return Save_User(playerid);
}
case 1:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Você deve estar em serviço.");
if (!IsPlayerAtUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
if (PlayerInfo[playerid][pSwatDuty]) return SendErrorMessage(playerid, "Coloque o traje de S.W.A.T.");
if (IsFactionPolice(faction))
{
new submes[16],
mes[sizeof(police_skins)*sizeof(submes)];
for(new i = 0; i < sizeof(police_skins); i++)
{
format(submes, sizeof(submes), "%i\tID: %i\n", police_skins[i], i);
strcat(mes, submes);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else if (IsFactionMedic(faction) || IsFactionFire(faction))
{
new submes[16], mes[sizeof(fd_skins)*sizeof(submes)];
for(new i = 0; i < sizeof(fd_skins); i++)
{
format(submes, sizeof(submes), "%i\tID: %i\n", fd_skins[i], i);
strcat(mes, submes);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else if (IsFactionDocs(faction))
{
new mes[sizeof(docs_skins)*128];
for(new i = 0; i < sizeof(docs_skins); i++)
{
format(mes, sizeof(mes), "%s%i\tID: %i\n", mes, docs_skins[i], docs_skins[i]);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else if (IsFactionCity(faction))
{
new submes[128], mes[sizeof(city_skins)*sizeof(submes)];
for(new i = 0; i < sizeof(city_skins); i++)
{
format(submes, sizeof(submes), "%i\tID: %i\n", city_skins[i], i);
strcat(mes, submes);
}
Dialog_Show(playerid, MODEL_SELECTION_UNIFORM, DIALOG_STYLE_PREVIEW_MODEL, "Selecione um uniforme", mes, "Selecionar", "Cancelar");
}
else SendErrorMessage(playerid, "Esta função não está disponível para sua facção.");
}
case 2:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Primeiro você precisa entrar em serviço.");
if (!IsPlayerAtUniform(playerid) && !IsPlayerAtSecondUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vertiario.");
if (IsFactionPolice(faction))
{
return Dialog_Show(playerid, LSPDArmoury, DIALOG_STYLE_LIST, "Equipamentos & armas", "• Rádio\n• Armas\n• S.W.A.T Equipamento", "Selecionar", "Voltar");
}
else if (IsFactionDocs(faction))
{
return Dialog_Show(playerid, DOCSGUN, DIALOG_STYLE_LIST, "Armas", "• Rádio\n• Cacetete\n• Spray de pimenta\n• Desert Eagle ( .50AE .ext )\n\t{ffc46a}- Pegar mais cartuchos ( .50AE .ext )\n{FFFFFF}• MP5 ( 9x19mm .ext )\n\t{ffc46a}- Pegar mais cartuchos ( 9x19mm .ext )\n{FFFFFF}• Shotgun ( 12-G BIRDSHOT )\n\t{ffc46a}- Pegar mais cartuchos ( 12-G BIRDSHOT )\n\t{ffc46a}- Pegar munição não letal ( 12-G BEANBAG )\n{FFFFFF}• М4 ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar mais cartuchos ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar munição não letal ( 5.56x45mm (rubber) )\n{FFFFFF}• Sniper Rifle (7.62x51mm)\n\t{ffc46a}- Pegar mais cartuchos ( 7.62x51mm )\n{FFFFFF}• Газовая граната\n• Фотокамера\n{FF6347}• Entregar todas as armas", "Selecionar", "Cancelar");
}
else if (IsFactionCity(faction))
{
return Dialog_Show(playerid, CITYGUN, DIALOG_STYLE_LIST, "Armas", "• Rádio\n• Desert Eagle ( .50AE .ext )\n\t{ffc46a}- Pegar mais cartuchos ( .50AE .ext )\n{FFFFFF}• MP5 ( 9x19mm .ext )\n\t{ffc46a}- Pegar mais cartuchos ( 9x19mm .ext )\n{FFFFFF}• М4 ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar mais cartuchos ( 5.56x45mm (drum) )\n\t{ffc46a}- Pegar munição não letal ( 5.56x45mm (rubber) )\n{FF6347}• Entregar todas as armas", "Selecionar", "Cancelar");
}
else if (IsFactionFire(faction) || IsFactionMedic(faction))
{
return Dialog_Show(playerid, FDArmoury, DIALOG_STYLE_LIST, "Equipamento", "• Rádio\n• Motosserra\n• Extintor de incêndio\n{FF6347}• Entregar todos os equipamentos", "Selecionar", "Voltar");
}
}
case 3:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Primeiro você precisa entrar em serviço.");
if (!IsFactionLegal(faction)) return SendErrorMessage(playerid, "Você deve ser um policial/paramédico.");
if (!IsPlayerAtUniform(playerid) && !IsPlayerAtSecondUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
if (IsFactionMedic(faction) || IsFactionFire(faction)) SetPlayerArmour(playerid, 50.0);
else SetPlayerArmour(playerid, 100.0);
SendSyntaxMessage(playerid, "Você coloca um colete à prova de balas.");
cmd::duty(playerid, "");
}
case 4:
{
if (!PlayerInfo[playerid][pOnDuty]) return SendErrorMessage(playerid, "Primeiro você precisa entrar em serviço (/duty).");
if (!IsPlayerAtUniform(playerid)) return SendErrorMessage(playerid, "Você não está no vestiário.");
Quando uma string passa do tamanho do chat, ela corta ou extrapola a tela. São várias as formas se fazer essemétodo.
Usando formatação de texto
Código PHP:
new PrimeiraLinha[120], SegundaLinha[120]; //Criando as variáveis;
if(strlen(texto) > 64) //Verificando se o texto possui mais de 64 caracteres, se sim, será cortada; { format(PrimeiraLinha, sizeof(PrimeiraLinha), "%.64s...", texto);//O ".64" corta o texto do começo até o caractere nessa posição; format(SegundaLinha, sizeof(SegundaLinha), "...%s", texto[64]);//O "texto[64]" irá cortar o texto no caractere 64 até o final. SendClientMessage(playerid, -1, PrimeiraLinha); SendClientMessage(playerid, -1, SegundaLinha); } else //Caso não tenha mais que 64 caracteres; { SendClientMessage(playerid, -1, texto);//Aqui envia diretamente o texto. }
Usando o strdel
Código PHP:
new SegundaLinha[120];//Novamente criando as variáveis;
if(strlen(texto) > 64)//Novamente verificando se o texto é maior que 64; { format(SegundaLinha, sizeof(SegundaLinha), texto[64]);//Irá definir a segunda linha como tudo o que tiver depois do caractere 64; strdel(texto, 64, strlen(texto));//Irá deletar do caractere 64 até o último caractere que estiver armazenado no texto; SendClientMessage(playerid, -1, texto); SendClientMessage(playerid, -1, SegundaLinha); } else { SendClientMessage(playerid, -1, texto); }