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;