rendered paste body//include
#include <a_samp>
#include <float>
#include <core>
#include <file>
#include <dudb>
#include <dini>
static gTeam[MAX_PLAYERS];
new gPlayerClass[MAX_PLAYERS];
new logged[MAX_PLAYERS];
new zlehaslo[MAX_PLAYERS];
new logintimeout[MAX_PLAYERS];
new giveplayer[MAX_PLAYER_NAME];
new sendername[MAX_PLAYER_NAME];
#define FILE_TOTALSTAT "totalstat.ini"
//------------dcmd--------------
#define dcmd(%1,%2,%3) if ((strcmp(%3, "/%1", true, %2+1) == 0)&&(((%3[%2+1]==0)&&(dcmd_%1(playerid,"")))||((%3[%2+1]==32)&&(dcmd_%1(playerid,%3[%2+2]))))) return 1
new gRoundTime = 3600000; // 60 minut
new savePos;
new giveplayerid;
//--TEAM--------------------------
#define TEAM_GROVE 0
#define TEAM_GROVE_COLOR 0x0080FFFF
#define TEAM_BALLAS 1
#define TEAM_BALLAS_COLOR 0x9E3DFFAA
#define TEAM_VAGOS 2
#define TEAM_VAGOS_COLOR 0xFFD700AA
#define TEAM_AZTECAS 3
#define TEAM_AZTECAS_COLOR 0x00CED3AA
//kolory
#define COLOR_GREEN 0x33AA33AA
#define COLOR_GREY 0xAFAFAFAA
#define FIOLETOWY 0x9E3DFFAA
#define COLOR_LIGHTBLUE 0x0000FFAA
#define BEZOWY 0xFFFFADAA
#define BIALY 0xFFFFFFAA
#define BLEKITNY 0x00FFFFAA
#define BORDOWY 0x99001FAA
#define BRAZOWY 0x997A00AA
#define CIEMNY_ZIELONY 0x336633AA
#define CZARNY 0x000000AA
#define CZERWONY 0xFF0000AA
#define FIOLETOWY 0x9E3DFFAA
#define NIEBIESKI 0x0000FFAA
#define POMARANCZOWY 0xFF8000AA
#define ROZOWY 0xFF66CCAA
#define SZARY 0xB0B0B0AA
#define ZIELONY 0x00CC00AA
#define ZOLTY 0xFFFF00AA
#define MAX_SAVE 64
new savedNames[MAX_SAVE][1];
new savedMoney[MAX_SAVE][1];
new savedScore[MAX_SAVE][1];
//
//-----------------------------------------------------------------------------
main()
{
print("\n----------------------------------");
print(" LS Gang War Beta " );
print("----------------------------------\n");
}
public OnGameModeInit()
{
print("GameModeInit(LS Gang war 0.1)");
SetGameModeText("LS Gang War 0.1");
SetTimer("GameModeExitFunc", gRoundTime, 0);
//Skiny
//plaerys
AddPlayerClass(107,2495.2207,-1687.3169,13.5152,351.7600,0,0,29,650,22,260); // Grove
AddPlayerClass(106,2495.2207,-1687.3169,13.5152,351.7600,0,0,29,650,22,260); // Grove
AddPlayerClass(105,2495.2207,-1687.3169,13.5152,351.7600,0,0,29,650,22,260); // Grove
AddPlayerClass(195,2495.2207,-1687.3169,13.5152,351.7600,0,0,29,650,22,260); // Grove
AddPlayerClass(102,832.2958,-1080.4476,24.2969,184.2249,4,0,25,320,32,550); // Ballas 1
AddPlayerClass(103,832.2958,-1080.4476,24.2969,184.2249,4,0,25,320,32,550); // Ballas 2
AddPlayerClass(104,832.2958,-1080.4476,24.2969,184.2249,4,0,25,320,32,550); // Ballas 3
AddPlayerClass(110,2459.0442,-949.4450,80.0800,180.7668,4,0,28,600,27,160); // Vagos
AddPlayerClass(109,2459.0442,-949.4450,80.0800,180.7668,4,0,28,600,27,160); // Vagos
AddPlayerClass(108,2459.0442,-949.4450,80.0800,180.7668,4,0,28,600,27,160); // Vagos
AddPlayerClass(114,1761.7893,-1892.7225,13.5551,269.0211,22,280,29,545,25,180); // Aztecas
AddPlayerClass(115,1761.7893,-1892.7225,13.5551,269.0211,22,280,29,545,25,180); // Aztecas
AddPlayerClass(116,1761.7893,-1892.7225,13.5551,269.0211,22,280,29,545,25,180); // Aztecas
//samochody
//TEAM BALLAS
AddStaticVehicle(566,1884.9437,-1266.3868,13.2813,94.9774,95,1);
AddStaticVehicle(566,1854.9448,-1210.8865,20.1397,0.8816,83,1);
AddStaticVehicle(566,1967.0892,-1219.9951,24.9483,182.0590,83,1);
AddStaticVehicle(481,1991.1158,-1230.2188,19.9276,130.2759,3,3);
AddStaticVehicle(481,1883.8904,-1253.2983,13.0437,88.8027,6,6);
return 1;
}
public OnPlayerConnect(playerid)
{
GameTextForPlayer(playerid,"Los santos: ~r~Gang War",2500,5);
SendClientMessage(playerid,ZOLTY,"Witaj na serverze LS Gang War jezeli chcesz uzyskac pomoc wpisz /pomoc");
GivePlayerMoney(playerid, 1000);
SetPlayerColor(playerid, COLOR_GREY); // Color na poczatku
if(gTeam[playerid] == TEAM_GROVE) {
SetPlayerColor(playerid, SZARY);
for(new i = 0; i < MAX_SAVE; i++)
{
if(isStringSame(savedNames[i], ReturnPlayerName(playerid), MAX_PLAYER_NAME))
{
StatGivePlayerMoney(playerid, savedMoney[i][0]);
SetPlayerScore(playerid, savedScore[i][0]);
savedScore[i][0]=0;
savedMoney[i][0]=0;
SendClientMessage(playerid, POMARANCZOWY, "Twoje pieniądze i punkty zostały przywrócone!");
}
}
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername[playerid], MAX_PLAYER_NAME);
if (dini_Exists(udb_encode(playername[playerid])))
{SendClientMessage(playerid,CZERWONY,"Twoj nick jest zarejstrowany jesli nie zalogujesz sie w ciagu 20 sekund zostaniesz wyrzucony!");
logintimeout[playerid] = SetTimer("LoginTimeout", 20000, 0);
new bmp[256];
bmp=dini_Get(udb_encode(playername),"kasa");
} else {
SendClientMessage(playerid, ZIELONY, "* Witamy, możesz się zarejestrować komendą: /register [hasło]");
logged[playerid] = 1;
}
}
}
public OnGameModeExit()
{
print("GameModeExit()");
return 1;
}
public zapisz(playerid)
{
new string[256];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
if (dini_Exists(udb_encode(playername)))
{
dini_IntSet(udb_encode(playername),"kasa",GetPlayerMoney(playerid));
} else {
format(string, sizeof(string), "* %s nie ma takiego konta.", playername);
SendClientMessage(playerid, CZERWONY, string);
}
return 1;
}
//---------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerClass(playerid, classid);
SetupPlayerForClassSelection(playerid);
gPlayerClass[playerid] = classid;
switch (classid) {
case 0,1,2:
{
GameTextForPlayer(playerid, "~g~GROVE", 500, 3);
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,2495.2227,-1686.6245,13.5142);
SetPlayerFacingAngle(playerid, 70.0);
SetPlayerCameraPos(playerid,2494.6362,-1679.8091,13.3386);
SetPlayerCameraLookAt(playerid,2494.6362,-1579.8091,13.3386);
}
case 3,4,5:{
GameTextForPlayer(playerid, "~p~BALLAS", 500, 3);
}
case 6,7,8:
{
GameTextForPlayer(playerid, "~y~VAGOS", 500, 3);
}
case 9,10,11:
{
GameTextForPlayer(playerid, "~b~AZTECAS", 500, 3);
} }
return 1;
}
//----------------------------------------------------------------------------------------
public OnPlayerDisconnect(playerid)
{{
format(savedNames[savePos], MAX_PLAYER_NAME, "%s",ReturnPlayerName(playerid));
savedMoney[savePos][0] = GetPlayerMoney(playerid);
savedScore[savePos][0] = GetPlayerScore(playerid);
savePos++;
if(savePos >= MAX_SAVE)
savePos = 0;
zapisz(playerid);
}
return 1;
}
//----------------------------------------------------------------------------------------
public LoginTimeout()
{
for (new i=0;i<MAX_PLAYERS;i++)
{
if (logged[i] == 0 && GetPlayerState(i) != PLAYER_STATE_NONE)
{
KickMsg(i, "Ochrona!", "Czas na zalogowanie się skończył!");
}
}
}
//-------------------------------------------------------------------------------------------
public OnPlayerSpawn(playerid)
{
SetPlayerInterior(playerid,0);
if(gTeam[playerid] == TEAM_GROVE) {
SetPlayerColor(playerid,COLOR_GREEN);// Green
GivePlayerWeapon(playerid,26,100);
}
else if(gTeam[playerid]==TEAM_BALLAS) {
SetPlayerColor(playerid,FIOLETOWY);
}
else if (gTeam[playerid]==TEAM_VAGOS) {
SetPlayerColor(playerid,ZOLTY);
}
else if (gTeam[playerid]==TEAM_VAGOS) {
SetPlayerColor(playerid,COLOR_LIGHTBLUE);
}
return 1;
}
//-------------------------------------------------------------------------------------------
public OnPlayerDeath(playerid, killerid, reason)
{
new killerstate=GetPlayerState(killerid);
new killedScore=GetPlayerScore(playerid);
GameTextForPlayer(playerid,"~w~WASTED",3000,2);
//self kill
if(killerid == INVALID_PLAYER_ID)
{
SendDeathMessage(INVALID_PLAYER_ID,playerid,reason);
ResetPlayerMoney(playerid);
SetPlayerScore(playerid, killedScore-1);
}
else {
// Valid kill
SendDeathMessage(killerid,playerid,reason);
SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
GivePlayerMoney(killerid, 1000);
}
//team kill
if(gTeam[killerid] != gTeam[playerid]) {
new warning[256];
format(warning, sizeof(warning), "Be careful! You have been punished for teamkilling.");
SendClientMessage(killerid, 0xFFFF00AA, warning);
SendDeathMessage(killerid,playerid,reason);
GivePlayerMoney(killerid, -1000);
SetPlayerScore(killerid, GetPlayerScore(killerid) - 1);
}
//DB
if((IsPlayerInAnyVehicle(killerid) && !IsPlayerInAnyVehicle(playerid) && killerstate == PLAYER_STATE_DRIVER && reason != WEAPON_VEHICLE)) {
new warning[256];
format(warning, sizeof(warning), "Bez DB.");
SendClientMessage(killerid, 0xFFFF00AA, warning);
SendDeathMessage(killerid,playerid,reason);
GivePlayerMoney(killerid, -1000);
SetPlayerScore(killerid, GetPlayerScore(killerid) - 1);
}
if (dini_Exists(udb_encode(Killer(killerid))))
{
new tmp[256];
tmp = dini_Get(udb_encode(Killer(killerid)), "zabojstw");
dini_IntSet(udb_encode(Killer(killerid)), "zabojstw", strval(tmp)+1);
if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
tmp = dini_Get(FILE_TOTALSTAT, "zabojstwa");
dini_IntSet(FILE_TOTALSTAT, "zabojstwa", strval(tmp)+1);
}
return 1;
}
//------------------------------------------------------------------------------
public StatGivePlayerMoney(playerid, amount)
{
new tmp[256];
{
if (IsPlayerConnected(playerid))
if (GetPlayerMoney(playerid)+amount<=50000000)
{
GivePlayerMoney(playerid,amount);
if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
if (amount > 0)
tmp=dini_Get(FILE_TOTALSTAT,"pieniadzezdobyte");
dini_IntSet(FILE_TOTALSTAT,"pieniadzezdobyte",strval(tmp)+amount);
} else {
tmp = dini_Get(FILE_TOTALSTAT, "pieniadzestracone");
dini_IntSet(FILE_TOTALSTAT, "pieniadzestracone", strval(tmp)-amount);
}
else {
SendClientMessage(playerid, CZERWONY, "* Uwaga!!! Masz maximum pieniędzy. Nie możesz mieć ich więcej przy sobie!");
SendClientMessage(playerid, CZERWONY, "* Udaj się do banku, aby wpłacić pieniądze na konto. Banki są w sklepach 24/7");
return 0;
}
}
return 1;
}
//---------------------------------------------------------------------------------
public OnVehicleSpawn(vehicleid)
{
printf("OnVehicleSpawn(%d)", vehicleid);
return 1;
}
//---------------------------------------------------------------------------------
public OnVehicleDeath(vehicleid, killerid)
{
printf("OnVehicleDeath(%d, %d)", vehicleid, killerid);
return 1;
}
//---------------------------------------------------------------------------------------------
public OnPlayerText(playerid,text[])
{
//TEAM CHAT
if(text[0] == '!')
{
new name[24], string[256];
GetPlayerName(playerid, name, 24);
format(string, sizeof(string), "[TC] %s: %s", name, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(gTeam[i] == gTeam[playerid])
SendClientMessage(i, COLOR_LIGHTBLUE, string);
}
}
return 0;
}
return 1;
}
//------------------------------------------------------------------------------------
public OnPlayerCommandText(playerid, cmdtext[]){
dcmd(register, 8, cmdtext);
dcmd(login, 5, cmdtext);
dcmd(pomoc, 5, cmdtext);
dcmd(givecash, 8, cmdtext);
return SendClientMessage(playerid, CZERWONY, "SERVER: Nie ma takiej komendy!");
}
dcmd_register(playerid, cmdtext[])
{
{
new tmp[256];
new tmp2[256];
new idx;
new playername[MAX_PLAYERS];
new string[256];
{
tmp2=dini_Get(FILE_TOTALSTAT,"Gracze");
tmp=strtok(cmdtext,idx);
GetPlayerName(playerid, playername, sizeof(playername));
if (20<strlen(tmp)||strlen(tmp)<5)
{
SendClientMessage(playerid,CZERWONY,"Haslo musi miec 5 liter ale nie wiecej niz 20");
return 1;
}
if(!strlen(tmp))
{
SendClientMessage(playerid,CZERWONY,"Wpisz:/register[haslo] aby sie zarejstrowac");
}
if (!dini_Exists(udb_encode(playername)))
{
dini_Create(udb_encode(playername));
dini_IntSet(udb_encode(playername), "haslo", udb_hash(tmp));
if (!dini_Exists(FILE_TOTALSTAT)) dini_Create(FILE_TOTALSTAT);
tmp2 = dini_Get(FILE_TOTALSTAT, "users");
dini_IntSet(FILE_TOTALSTAT, "users", strval(tmp2)+1);
dini_Set(FILE_TOTALSTAT, "lastuser", playername);
format(string, sizeof(string), "* %s (id: %d) utworzyłeś/aś nowe konto. Twoje hasło to: >>> %s <<< Zapamiętaj je!!!", playername, playerid, tmp);
SendClientMessage(playerid, ZIELONY, string);
}
else {
format(string, sizeof(string), "* %s jest już zarejestrowany.", playername,tmp);
SendClientMessage(playerid, CZERWONY, string);
}
return 1;
}
}
}
//------------------------------------------------------------------------------
dcmd_login(playerid, cmdtext[]){
new tmp[256];
new tmp2[256];
new idx;
new playername[MAX_PLAYERS];
new string[256];
tmp=strtok(cmdtext,idx);
GetPlayerName(playerid,playername,sizeof(playername));
if(!strlen(tmp))
{
SendClientMessage(playerid,CZERWONY,"Wpisz:/login [haslo]");
}
if (dini_Exists(udb_encode(playername)))
{
if (logged[playerid]== 1)
{ SendClientMessage(playerid, CZERWONY, "* Jesteś już zalogowany!");
} else {
tmp2=dini_Get(udb_encode(playername),"haslo");
}
if (udb_hash(tmp) != strval(tmp2)){
format(string, sizeof(string), "* %s (id: %d) wpisałeś złe hasło: %s.", playername, playerid, tmp);
printf(string);
SendClientMessage(playerid, CZERWONY, "* Podałeś złe hasło.");
GameTextForPlayer(playerid, "~r~Zle haslo!", 3000, 5);
zlehaslo[playerid]++;
if (zlehaslo[playerid] >= 5) KickMsg(playerid, "Ochrona", "Za dużo prób!");
}
else { logged[playerid] = 1;
KillTimer(logintimeout[playerid]);
logged[playerid] = 1;
format(string, sizeof(string), "--- %s (id: %d) zalogowany . haslo: %s.", playername, playerid, tmp);
printf(string);
SendClientMessage(playerid, COLOR_GREEN, "* JEstes zalogowany!");
}
}
return 1;
}
//------------------------------------------------------------------------------
dcmd_pomoc(playerid,cmdtext[]) {
#pragma unused cmdtext
SendClientMessage(playerid, ZOLTY,"Witaj na LS Gang War aby zobaczyc liste komend wpisz /komendy");
return 1;
}
dcmd_givecash(playerid, cmdtext[])
{
new idx;
new string[256];
new tmp[256];
new playermoney;
new moneys;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, BIALY, "* WPISZ: /givecash [idgracza] [kwota]");
return 1;
}
giveplayerid = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, BIALY, "* WPISZ: /givecash [idgracza] [kwota]");
return 1;
}
moneys = strval(tmp);
if (IsPlayerConnected(giveplayerid))
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
playermoney = GetPlayerMoney(playerid);
if (giveplayerid == playerid) {
SendClientMessage(playerid, CZERWONY, "* Nie możesz wysłać sobie pieniędzy!");
return 1;
}
if (moneys > 0 && playermoney >= moneys)
{
StatGivePlayerMoney(playerid, (0 - moneys));
StatGivePlayerMoney(giveplayerid, moneys);
format(string, sizeof(string), "* Oddałeś/aś graczowi %s (id: %d), $%d pieniędzy.", giveplayer,giveplayerid, moneys);
SendClientMessage(playerid, ZOLTY, string);
format(string, sizeof(string), "* Otrzymałeś/aś $%d pieniędzy od gracza %s (id: %d).", moneys, sendername, playerid);
SendClientMessage(giveplayerid, ZIELONY, string);
} else {
SendClientMessage(playerid, CZERWONY, "* Nieprawidłowa kwota transakcji.");
}
} else {
format(string, sizeof(string), "* %d nie ma takiego gracza!", giveplayerid);
SendClientMessage(playerid, CZERWONY, string);
}
return 1;
}
//------------------------------------------------------------------------------
public KickMsg(playerid, kickername[], reason[])
{
new string[256];
new tmp[256];
new playername[MAX_PLAYER_NAME];
format(string, sizeof(string), "*** %s (id: %d) został/ła wyrzucony/na przez administratora: %s. Powód: %s ***", playername, playerid, kickername, reason);
GetPlayerName(playerid,playername,sizeof(playername));
printf(string);
SendClientMessageToAll(CZERWONY, string);
Kick(playerid);
tmp=dini_Get(FILE_TOTALSTAT,"kicki");
dini_IntSet(FILE_TOTALSTAT, "kicki", strval(tmp)+1);
return 1;
}
//------------------------------------------------------------------------------
public SavedUpdate()
{
for(new i = 0; i < MAX_SAVE; i++)
{
savedScore[i][0] = 0;
savedMoney[i][0] = 0;
savedNames[i][0] = 0;
}
}
//------------------------------------------------------------------------------
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
printf("OnPlayerEnterVehicle(%d, %d, %d)", playerid, vehicleid, ispassenger);
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
printf("OnPlayerExitVehicle(%d, %d)", playerid, vehicleid);
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
printf("OnPlayerEnterCheckpoint(%d)", playerid);
return 1;
}
public SetupPlayerForClassSelection(playerid)
{
SetPlayerInterior(playerid,14);
SetPlayerPos(playerid,258.4893,-41.4008,1002.0234);
SetPlayerFacingAngle(playerid, 90.0);
SetPlayerCameraPos(playerid,256.0815,-43.0475,1003.0234);
SetPlayerCameraLookAt(playerid,258.4893,-41.4008,1002.0234);
}
//-----------------------------------------------------------------------------
public OnPlayerLeaveCheckpoint(playerid)
{
printf("OnPlayerLeaveCheckpoint(%d)", playerid);
return 1;
}
public PlayerName(playerid){
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, sizeof(Name));
return Name;
}
public LogIn(playerid)
{
logged[playerid]=1;
return 1;
}
isStringSame(const string1[], const string2[], len) {
for(new i = 0; i < len; i++) {
if(string1[i]!=string2[i])
return 0;
if(string1[i] == 0 || string1[i] == '\n')
return 1;
}
return 1;
}
public ReturnPlayerName(playerid) //By Alex "Y_Less" Cole
{
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof (pname));
return pname;
}
public Killer(killerid)
{
new killer[MAX_PLAYER_NAME];
GetPlayerName(killerid, killer, sizeof(killer));
return killer;
}
//--------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
SetPlayerClass(playerid, classid)
{
if(classid == 0)
{
gTeam[playerid] = TEAM_GROVE;
}
else if(classid==1)
{
gTeam[playerid] = TEAM_BALLAS;
}
else if(classid==2)
{
gTeam[playerid] = TEAM_VAGOS;
}
else if(classid==3)
{
gTeam[playerid] = TEAM_AZTECAS;
}
}