└ O QUE É O SAN FIERRO ROLEPLAY?
O San Fierro Roleplay é um servidor de SA-MP baseado na interpretação, tendo como objetivo proporcionar liberdade e diversão aos jogadores para criarem e desenvolverem seus personagens e situações corriqueiras no berço da tecnologia norte-americana: San Fierro. Além disso, a proposta visa criar uma alternativa de jogo para a comunidade luso-brasileira de roleplay, gerando maiores possibilidades de interpretação em um ambiente pouco explorado no SA-MP, acompanhado de sistemas desenvolvidos para garantir maior imersão aos que procuram uma nova vida virtual.
└ O QUE É ROLEPLAY?
O roleplay pode ser definido, em poucas palavras, como um modo de jogo que se baseia na realidade e possibilita aos jogadores aprenderem a desenvolverem seus personagens para, assim, criarem situações diversas, com liberdade e garantia de vivenciar experiências de várias formas, seja na pele de um cidadão comum, de um advogado, de um político, de um criminoso ou até mesmo de um agente da lei – o que vale é a diversão com base no senso interpretativo.
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.");