16.03.2014, 01:12
Sistema de drop de caixas
Descriзгo
Bom, fiquei algum tempo sem pc, mas agora estou com ele novamente.
Nгo irei mais jogar SA:MP, mas, como "despedida minha", irei postar este ъltimo sistema
.
Й um simples filterscript, outra vez, baseado no Combat Arms.
.
Creio eu que tenha alguns bugs, mas, nгo sгo dнficeis de se arrumar.
Caso nгo consiga, poste o bug/erro, que quando eu aparecer pelo fуrum, ajudarei.
Informaзхes
O drop de caixas acontece quando algum jogador mata o outro, ou se mata.
Talvez(utilizando random), a caixa irб dropar(aparecer), basta passar em cima dela que vocк irб obte-la.
Para abrir a mesma, use: /minhascaixas e selecione-a.
Este sistema nгo й salvбvel e й mais recomendбvel o uso em servidores de DM/TDM.
Nгo coloquei para salvar, pуis, se for utilizar em servidores de DM ou TDM,
e estiver com grande quantidade de players, nгo serб necessбrio.
Mas, se caso queira colocar salvamento, ai й de opзгo do scripter que vai utiliza-lo.
Alteraзхes
Pode-se alterar o mбximo de caixas.
Pode-se alterar a pickup(objeto) que irб aparecer.
Pode-se alterar a muniзгo das armas. Creio que й melhor, infinitas.
Pode-se alterar o tanto de cйlulas nas strings.
Tenha cuidado com as dialogs, em caso de conflito, mude os ID's.
Vнdeo
Desculpem a mб resoluзгo, mas, estou sem Sony Vegas.
[ame]http://www.youtube.com/watch?v=7qednPUinUU[/ame]
Crйditos
FilterScript > @Riichard
RandomEx > ******
ResetWeaponPlayer > nгo sei.
Cуdigo
Desculpe pela bagunзa do cуdigo(ao meu ver, estб bagunзado) e pelos erros de portuguкs.
Descriзгo
Bom, fiquei algum tempo sem pc, mas agora estou com ele novamente.
Nгo irei mais jogar SA:MP, mas, como "despedida minha", irei postar este ъltimo sistema
.Й um simples filterscript, outra vez, baseado no Combat Arms.
.Creio eu que tenha alguns bugs, mas, nгo sгo dнficeis de se arrumar.
Caso nгo consiga, poste o bug/erro, que quando eu aparecer pelo fуrum, ajudarei.
Informaзхes
O drop de caixas acontece quando algum jogador mata o outro, ou se mata.
Talvez(utilizando random), a caixa irб dropar(aparecer), basta passar em cima dela que vocк irб obte-la.
Para abrir a mesma, use: /minhascaixas e selecione-a.
Este sistema nгo й salvбvel e й mais recomendбvel o uso em servidores de DM/TDM.
Nгo coloquei para salvar, pуis, se for utilizar em servidores de DM ou TDM,
e estiver com grande quantidade de players, nгo serб necessбrio.
Mas, se caso queira colocar salvamento, ai й de opзгo do scripter que vai utiliza-lo.
Alteraзхes
Pode-se alterar o mбximo de caixas.
pawn Код:
#define MAX_CAIXAS 50
pawn Код:
#define objcaixa 964
pawn Код:
#define BalasInfinitas 999999
pawn Код:
#define AllCelulas 450
Vнdeo
Desculpem a mб resoluзгo, mas, estou sem Sony Vegas.
[ame]http://www.youtube.com/watch?v=7qednPUinUU[/ame]
Crйditos
FilterScript > @Riichard
RandomEx > ******
ResetWeaponPlayer > nгo sei.
Cуdigo
pawn Код:
/*
[FilterScript] Sistema de drop de caixas
> Ultimo projeto/sistema feito.
by: @Riichard
*/
// Includes
#include <a_samp>
#include <zcmd>
// Defines
#define MAX_CAIXAS 50
#define NaoDropar 1
#define DroparCaixa 2
#define objcaixa 964
#define dialogMyCaixas 234
#define dialogConcord 235
#define dialogPremio 236
#define BalasInfinitas 999999
#define AllCelulas 450 // Alta por causa das dialogs.
// Variaveis
new
idcaixa[MAX_PLAYERS],
n_caixa[MAX_CAIXAS],
player_caixas[MAX_PLAYERS],
bool:_Aguarde[MAX_PLAYERS],
bool:caixa_number[MAX_CAIXAS],
number_caixas,
Float:pos_X, Float:pos_Y, Float:pos_Z
;
// -----------------------------------------------------------------------
public OnFilterScriptInit() return print("[Sistema de drop de caixa] Carregado com sucesso."), number_caixas = 0;
public OnFilterScriptExit()
{
for(new ncaixas = 1; ncaixas<MAX_CAIXAS+1; ncaixas++)
{
DestroyPickup(n_caixa[ncaixas]);
caixa_number[ncaixas] = false;
}
number_caixas = 0;
print("[Sistema de drop de caixa] Descarregado com sucesso.");
return 1;
}
public OnPlayerConnect(playerid) return idcaixa[playerid] = 0, player_caixas[playerid] = 0, 0;
public OnPlayerDisconnect(playerid, reason) return _Aguarde[playerid] = false, 0;
public OnPlayerDeath(playerid, killerid, reason)
{
new checkcaixa = RandomEx(NaoDropar, DroparCaixa);
if(checkcaixa == DroparCaixa)
{
if(number_caixas == MAX_CAIXAS) return 1;
GetPlayerPos(playerid, pos_X, pos_Y, pos_Z);
number_caixas += 1;
n_caixa[number_caixas] = CreatePickup(objcaixa, 1, pos_X, pos_Y, pos_Z);
caixa_number[number_caixas] = true;
SendClientMessageToAll(0xA9A9A9FF, "Uma caixa {FF0000}Army{A9A9A9} foi derrubada.");
for(new playersx = 0; playersx<MAX_PLAYERS; playersx++)
if(IsPlayerConnected(playersx))
PlayerPlaySound(playersx, 1149, 0.0, 0.0, 0.0);
if(player_caixas[playerid] > 0) player_caixas[playerid] -= 1;
}
return 0;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
new mycel[110], myname[MAX_PLAYER_NAME];
GetPlayerName(playerid, myname, sizeof(myname));
for(new ncaixas = 1; ncaixas<MAX_CAIXAS+1; ncaixas++)
{
if(pickupid == n_caixa[ncaixas])
{
idcaixa[playerid] = ncaixas;
goto Final;
}
}
Final:
if(idcaixa[playerid] == 0) return 1;
DestroyPickup(n_caixa[idcaixa[playerid]]);
number_caixas -= 1;
caixa_number[idcaixa[playerid]] = false;
format(mycel, sizeof(mycel), "{FF0000}%s{A9A9A9} obteve uma caixa {FF0000}Army{A9A9A9}.", myname);
SendClientMessageToAll(0xA9A9A9FF, mycel);
idcaixa[playerid] = 0;
player_caixas[playerid] += 1;
PlayerPlaySound(playerid, 1150, 0.0, 0.0, 0.0);
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new _StringMsg[AllCelulas], _StringMsg1[AllCelulas];
if(dialogid == dialogMyCaixas)
{
if(response)
{
if(_Aguarde[playerid] == true) return SendClientMessage(playerid, -1, "Vocк deve esperar o item da primeira caixa expirar.");
format(_StringMsg, sizeof(_StringMsg), "{DCDCDC}Vocк quer mesmo abrir a caixa {FF0000}Army(%d){DCDCDC}?", listitem+1);
ShowPlayerDialog(playerid, dialogConcord, DIALOG_STYLE_MSGBOX, "Caixa Army", _StringMsg, "Sim", "Nгo");
}
}
if(dialogid == dialogConcord)
{
if(response)
{
player_caixas[playerid] -= 1;
// ================================================================
new PremioID = RandomEx(1, 34); // Soco inglкs atй Sniper.
if(PremioID == 19 || PremioID == 20 || PremioID == 21) PremioID = 43; // Cвmera
// ================================================================
new MinutosID = RandomEx(10, 100); // Entre 10 e 99 minutos.
if(MinutosID == 100) MinutosID = 0; // 100 minutos = Permanente
// ================================================================
new nomepremio[30];
GetWeaponName(PremioID, nomepremio, sizeof(nomepremio));
// ================================================================
if(PremioID == 18) nomepremio = "Molotov Cocktail";
else if(PremioID == 43) nomepremio = "Cвmera";
// ================================================================
if(MinutosID == 0)
{
new _pNome[MAX_PLAYER_NAME];
GetPlayerName(playerid, _pNome, sizeof(_pNome));
strcat(_StringMsg, "\n{DCDCDC}- Vocк abriu uma caixa Army e obteve:\n");
format(_StringMsg1, sizeof(_StringMsg1), "\n\t {FFFFFF}%s\n", nomepremio);
strcat(_StringMsg, _StringMsg1);
strcat(_StringMsg, "\n\t {FF0000}PERMANENTE\n\n");
ShowPlayerDialog(playerid, dialogPremio, DIALOG_STYLE_MSGBOX, "Parabйns", _StringMsg, "Fechar", "");
format(_StringMsg, sizeof(_StringMsg), "{FFFFFF}%s{A9A9A9} abriu uma caixa {FFFFFF}Army{A9A9A9} e obteve o item {FF0000}%s{A9A9A9}.",_pNome, nomepremio);
SendClientMessageToAll(0xA9A9A9FF, _StringMsg);
}else{
format(_StringMsg, sizeof(_StringMsg), "\n{DCDCDC}- Vocк obteve %s por {FF0000}%d{DCDCDC} minutos.\n\n", nomepremio, MinutosID);
ShowPlayerDialog(playerid, dialogPremio, DIALOG_STYLE_MSGBOX, "Informaзгo", _StringMsg, "Fechar", "");
}
// ================================================================
GivePlayerWeapon(playerid, PremioID, BalasInfinitas);
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);
if(MinutosID > 0)
_Aguarde[playerid] = true, SetTimerEx("ResetItem", MinutosID*60000, false, "dd", playerid, PremioID);
}
}
return 1;
}
CMD:minhascaixas(playerid)
{
if(player_caixas[playerid] == 0)
return SendClientMessage(playerid, -1, "Vocк nгo possui nenhuma caixa.");
new _String1[AllCelulas], _String2[AllCelulas];
for(new tantacaixa = 1; tantacaixa<player_caixas[playerid]+1; tantacaixa++)
{
format(_String1, sizeof(_String1), "> Caixa {A9A9A9}Army{FFFFFF} - %d\n", tantacaixa);
strcat(_String2, _String1);
}
return ShowPlayerDialog(playerid, dialogMyCaixas, DIALOG_STYLE_LIST, "Minhas caixas", _String2, "Abrir", "Cancelar");
}
// - Comando usado para testes sozinho.
/*
CMD:hue(playerid)
{
if(number_caixas == MAX_CAIXAS) return 1;
GetPlayerPos(playerid, pos_X, pos_Y, pos_Z);
number_caixas += 1;
n_caixa[number_caixas] = CreatePickup(objcaixa, 1, pos_X, pos_Y, pos_Z-0.5);
caixa_number[number_caixas] = true;
SetPlayerPos(playerid, pos_X+2, pos_Y+1, pos_Z+1);
SendClientMessageToAll(0xA9A9A9FF, "Uma caixa {FF0000}Army{A9A9A9} foi derrubada.");
for(new playersx = 0; playersx<MAX_PLAYERS; playersx++)
if(IsPlayerConnected(playersx))
PlayerPlaySound(playersx, 1149, 0.0, 0.0, 0.0);
return 1;
}
*/
// ================================================================================
forward ResetItem(playerid, idreset);
public ResetItem(playerid, idreset)
{
_Aguarde[playerid] = false;
ResetWeaponPlayer(playerid, idreset);
SendClientMessage(playerid, 0xFF0000FF, "Seu tempo esgotou, seu item expirou.");
return 1;
}
// Thanks, nгosei.
forward ResetWeaponPlayer(playerid, weaponid);
public ResetWeaponPlayer(playerid, weaponid)
{
new plyWeapons[12] = 0;
new plyAmmo[12] = 0;
for(new slot = 0; slot != 12; slot++)
{
new wep, ammo;
GetPlayerWeaponData(playerid, slot, wep, ammo);
if(wep != weaponid && ammo != 0)
GetPlayerWeaponData(playerid, slot, plyWeapons[slot], plyAmmo[slot]);
}
ResetPlayerWeapons(playerid);
for(new slot = 0; slot != 12; slot++)
if(plyAmmo[slot] != 0)
GivePlayerWeapon(playerid, plyWeapons[slot], plyAmmo[slot]);
return true;
}
// Thanks, ******
stock RandomEx(minnum = cellmin, maxnum = cellmax)
return random(maxnum - minnum + 1) + minnum;


