11.02.2010, 10:30
Код:
#include <a_samp> #include <utils> #define FILTERSCRIPT #if defined FILTERSCRIPT #define COLOR_GREY 0xBEBEBEAA #define COLOR_WHITE 0xFFFFFFAA #define COLOR_GREEN 0x33AA33AA #define COLOR_GRAD5 0xE3E3E3FF #define COLOR_GRAD1 0xB4B5B7FF #define COLOR_YELLOW 0xFFFF00AA #define COLOR_GRAD2 0xBFC0C2FF #define COLOR_GRAD4 0xD8D8D8FF #define COLOR_GRAD6 0xF0F0F0FF #define COLOR_GRAD2 0xBFC0C2FF #define COLOR_GRAD3 0xCBCCCEFF forward ShowStats(playerid,targetid); forward OnPlayerUpdate(playerid); forward Encrypt(string[]); forward OnPlayerLogin(playerid,const string[]); forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z); forward ABroadCast(color,const string[],level); forward CustomPickups(); enum pInfo { pPassword[128], pKills, pDeaths, pCash, pBank, }; new PlayerInfo[MAX_PLAYERS][pInfo]; new gPlayerLogged[MAX_PLAYERS]; new gPlayerAccount[MAX_PLAYERS]; new ConsumingMoney[MAX_PLAYERS]; new sendername[MAX_PLAYER_NAME]; new playermoney; public OnFilterScriptInit() { print("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); print(" Kevin433's Login/Register Filterscript"); print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); SetTimer("CustomPickups", 1000, 1); AddStaticPickup(1274, 2,2026.4064,1017.9352,10.8203); return 1; } public OnFilterScriptExit() { return 1; } public OnPlayerRequestClass(playerid, classid) { return 1; } public OnPlayerRequestSpawn(playerid) { new playrname[MAX_PLAYER_NAME]; new connect[128]; GetPlayerName(playerid, playrname, sizeof(playrname)); format(connect, sizeof(connect), "%s.ini", playrname); if(fexist(connect)) { gPlayerAccount[playerid] = 1; SendClientMessage(playerid, COLOR_YELLOW, "[СЕРВЕР]:Ты зарегестрирован, вводи /login пароль"); return 0; } return 1; } public OnPlayerConnect(playerid) { new playrname[MAX_PLAYER_NAME]; new connect[128]; GetPlayerName(playerid, playrname, sizeof(playrname)); format(connect, sizeof(connect), "%s.ini", playrname); if(fexist(connect)) { gPlayerAccount[playerid] = 1; SendClientMessage(playerid, COLOR_YELLOW, "[СЕРВЕР]:Ты зарегестрирован, вводи /login пароль"); return 1; } else { gPlayerAccount[playerid] = 0; SendClientMessage(playerid, COLOR_YELLOW, "[СЕРВЕР]:Ты не зарегестрирован, зарегестрируся командой: /register пароль"); } return 1; } public OnPlayerDisconnect(playerid, reason) { OnPlayerUpdate(playerid); gPlayerLogged[playerid] = 0; return 1; } public OnPlayerSpawn(playerid) { return 1; } public OnPlayerDeath(playerid, killerid, reason) { new kills = PlayerInfo[playerid][pKills]; SetPlayerScore(playerid, kills); new Float:Health; GetPlayerHealth(playerid, Health); if(Health == 0.0) { PlayerInfo[playerid][pDeaths] += 1; } GivePlayerMoney(killerid,2000); PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills] + 1; return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new cmd[256]; new idx; cmd = strtok(cmdtext, idx); new tmp[256]; new playername[MAX_PLAYER_NAME]; new string[256]; new moneys; new giveplayer[MAX_PLAYER_NAME]; new giveplayerid; if (strcmp(cmd, "/login", true) ==0 ) { if(IsPlayerConnected(playerid)) { new tmppass[64]; if(gPlayerLogged[playerid] == 1) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Ты уже залогинен."); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Используй: /login [пароль]"); return 1; } strmid(tmppass, tmp, 0, strlen(cmdtext), 255); Encrypt(tmppass); OnPlayerLogin(playerid,tmppass); } return 1; } if (strcmp(cmd, "/register", true)==0) { //new string[265]; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Используй: /register [пароль]"); return 1; } if (gPlayerAccount[playerid] == 1) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Ник уже зарегестрирован"); return 1; } strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255); Encrypt(PlayerInfo[playerid][pPassword]); GetPlayerName(playerid, playername, sizeof(playername)); format(string, sizeof(string), "%s.ini", playername); new File: file = fopen(string, io_read); if (file) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Ник уже зарегестрирован"); fclose(file); return 1; } new File:hFile; hFile = fopen(string, io_append); new var[32];// format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var); format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var); format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var); format(var, 32, "Bank=%d\n",PlayerInfo[playerid][pBank]);fwrite(hFile, var); fclose(hFile); SendClientMessage(playerid, COLOR_WHITE, "[СЕРВЕР]:Удачно зарегестрирован!"); SendClientMessage(playerid, COLOR_WHITE, "[СЕРВЕР]:Следующий раз, при входе пиши /login <пароль> чтобы войти."); OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]); return 1; } if (strcmp(cmd, "/stats", true) == 0) { if(IsPlayerConnected(playerid)) { if (gPlayerLogged[playerid] != 0) { ShowStats(playerid,playerid); } else { SendClientMessage(playerid, COLOR_GRAD1, "[СЕРВЕР]:Ты не залогинен !"); } } return 1; } //=================[Bank System]================================================================ if(strcmp(cmd, "/bank", true) == 0 || strcmp(cmd, "/deposit", true) == 0) { if(IsPlayerConnected(playerid)) { if(!PlayerToPoint(20.0,playerid,2305.688964,-16.088100,26.749599)) { SendClientMessage(playerid, COLOR_GREY, " Ты не в банке !"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "[БАНК]:Использование: /bank [сумма]"); format(string, sizeof(string), " You Have $%d in your account.", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_GRAD3, string); return 1; } new cashdeposit = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "[БАНК]:Использование: /bank [сумма]"); format(string, sizeof(string), " You Have $%d in your account.", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_GRAD3, string); return 1; } if (cashdeposit > GetPlayerMoney(playerid) || cashdeposit < 1) { SendClientMessage(playerid, COLOR_GRAD2, "[БАНК]:У тебя нет такого количества денег"); return 1; } GivePlayerMoney(playerid,-cashdeposit); new curfunds = PlayerInfo[playerid][pBank]; PlayerInfo[playerid][pBank]=cashdeposit+PlayerInfo[playerid][pBank]; SendClientMessage(playerid, COLOR_GREEN, "|___ БАНК САН АНДРЕАС ___|"); format(string, sizeof(string), " Старый баланс: $%d", curfunds); SendClientMessage(playerid, COLOR_GRAD2, string); format(string, sizeof(string), " Внесено: $%d",cashdeposit); SendClientMessage(playerid, COLOR_GRAD4, string); SendClientMessage(playerid, COLOR_GREEN, "|-----------------------------------------|"); format(string, sizeof(string), " Новый баланс: $%d", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_WHITE, string); return 1; } return 1; } if(strcmp(cmd, "/withdraw", true) == 0) { if(IsPlayerConnected(playerid)) { if(!PlayerToPoint(20.0,playerid,2305.688964,-16.088100,26.749599)) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Ты не в банке !"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "[БАНК]:Использование: /withdraw [сумма]"); format(string, sizeof(string), "[БАНК]:У тебя $%d на аккаунте.", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_GRAD3, string); return 1; } new cashdeposit = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, "[БАНК]:Использование: /withdraw [сумма]"); format(string, sizeof(string), "[БАНК]:У тебя $%d на аккаунте.", PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_GRAD3, string); return 1; } if (cashdeposit > PlayerInfo[playerid][pBank] || cashdeposit < 1) { SendClientMessage(playerid, COLOR_GRAD2, "[БАНК]:У тебя нет такого количества денег !"); return 1; } ConsumingMoney[playerid] = 1; GivePlayerMoney(playerid,cashdeposit); PlayerInfo[playerid][pBank]=PlayerInfo[playerid][pBank]-cashdeposit; format(string, sizeof(string), "[БАНК]:Ты снял $%d со счёта, Баланс: $%d ", cashdeposit,PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_YELLOW, string); return 1; } return 1; } if(strcmp(cmd, "/balance", true) == 0) { if(IsPlayerConnected(playerid)) { if(!PlayerToPoint(20.0,playerid,2305.688964,-16.088100,26.749599)) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Ты не в банке !"); return 1; } format(string, sizeof(string), "[БАНК]:У тебя $%d на аккаунте.",PlayerInfo[playerid][pBank]); SendClientMessage(playerid, COLOR_YELLOW, string); } return 1; } if(strcmp(cmd, "/transfer", true) == 0 || strcmp(cmd, "/wiretransfer", true) == 0) { if(IsPlayerConnected(playerid)) { if(!PlayerToPoint(20.0,playerid,2305.688964,-16.088100,26.749599)) { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Ты не в банке !"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD1, "[БАНК]:Использование: /transfer [id/Ник] [сумма]"); return 1; } giveplayerid = ReturnUser(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD1, "[БАНК]:Использование: /transfer [id/Ник] [сумма]"); return 1; } moneys = strval(tmp); if (IsPlayerConnected(giveplayerid)) { if(giveplayerid != INVALID_PLAYER_ID) { GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); GetPlayerName(playerid, sendername, sizeof(sendername)); playermoney = PlayerInfo[playerid][pBank] ; if (moneys > 0 && playermoney >= moneys) { PlayerInfo[playerid][pBank] -= moneys; PlayerInfo[giveplayerid][pBank] += moneys; format(string, sizeof(string), "[БАНК]:Ты передал $%d на аккаунт %s", moneys, giveplayer,giveplayerid); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); SendClientMessage(playerid, COLOR_GRAD1, string); format(string, sizeof(string), "[БАНК]:Ты получил $%d на свой аккаунт от %s", moneys, sendername, playerid); SendClientMessage(giveplayerid, COLOR_GRAD1, string); format(string, sizeof(string), "[БАНК]:%s передал $%d гроку %s", sendername, moneys, giveplayer); if(moneys >= 500000) { ABroadCast(COLOR_GREEN,string,1); } printf("%s", string); PlayerPlaySound(giveplayerid, 1052, 0.0, 0.0, 0.0); } else { SendClientMessage(playerid, COLOR_GRAD1, "[БАНК]:Не корректная сумма."); } } } else { format(string, sizeof(string), "[БАНК]:%d неактивный игрок.", giveplayerid); SendClientMessage(playerid, COLOR_GRAD1, string); } } return 1; } //==========================[Enter and Exit]========================================================================================================== if(strcmp(cmd, "/enter", true) == 0) { if (PlayerToPoint(3.0, playerid,-2054.6311,456.6516,35.1719))// Bank { SetPlayerPos(playerid,2305.688964,-16.088100,26.749599); GameTextForPlayer(playerid, "~w~Welcome to the City Bank!~n~~w~Type /exit to get out", 5000, 5); SetPlayerInterior(playerid, 0); } return 1; } if(strcmp(cmdtext, "/exit", true) == 0) { if (PlayerToPoint(3.0, playerid,2305.688964,-16.088100,26.749599))// Bank { SetPlayerPos(playerid,1465.1801,-1010.9435,26.8438); SetPlayerInterior(playerid, 0); } return 1; } return 0; } public Encrypt(string[]) { for(new x=0; x < strlen(string); x++) { string[x] += (3^x) * (x % 15); if(string[x] > (0xff)) { string[x] -= 64; } } return 1; } public OnPlayerLogin(playerid,const string[]) { new pname2[MAX_PLAYER_NAME]; new pname3[MAX_PLAYER_NAME]; new string2[64]; new string3[128]; GetPlayerName(playerid, pname2, sizeof(pname2)); format(string2, sizeof(string2), "%s.ini", pname2); new File: UserFile = fopen(string2, io_read); if (UserFile) { new valtmp[128]; fread(UserFile, valtmp);strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255); if ((strcmp(PlayerInfo[playerid][pPassword], string, true, strlen(valtmp)-1) == 0)) { new key[128],val[128]; new Data[128]; while(fread(UserFile,Data,sizeof(Data))) { key = ini_GetKey(Data); if( strcmp( key , "Kills" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); } if( strcmp( key , "Deaths" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); } if( strcmp( key , "Money" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); } if( strcmp( key , "Bank" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pBank] = strval( val ); } GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); } fclose(UserFile); gPlayerLogged[playerid] = 1; gPlayerAccount[playerid] = 1; new kills = PlayerInfo[playerid][pKills]; SetPlayerScore(playerid, kills); GetPlayerName(playerid, pname3, sizeof(pname3)); format(string3, sizeof(string3), "[СЕРВЕР]:Привет %s, Ты удачно вошел!", pname3); SendClientMessage(playerid, COLOR_GREEN,string3); } else { SendClientMessage(playerid, COLOR_GREY, "[СЕРВЕР]:Пароль не подходит к нику"); fclose(UserFile); } } return 1; } public OnPlayerUpdate(playerid) { if(IsPlayerConnected(playerid)) { if(gPlayerLogged[playerid]) { new string3[32]; new pname3[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname3, sizeof(pname3)); format(string3, sizeof(string3), "%s.ini", pname3); new File: pFile = fopen(string3, io_write); if (pFile) { new var[32]; format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(pFile, var); fclose(pFile); new File: hFile = fopen(string3, io_append); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var); format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var); format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var); format(var, 32, "Bank=%d\n",PlayerInfo[playerid][pBank]);fwrite(hFile, var); fclose(hFile); } } } return 1; } stock ini_GetKey( line[] ) { new keyRes[128]; keyRes[0] = 0; if ( strfind( line , "=" , true ) == -1 ) return keyRes; strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) ); return keyRes; } stock ini_GetValue( line[] ) { new valRes[128]; valRes[0]=0; if ( strfind( line , "=" , true ) == -1 ) return valRes; strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) ); return valRes; } strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public ShowStats(playerid,targetid) { if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid)) { new cash = GetPlayerMoney(targetid); new deaths = PlayerInfo[targetid][pDeaths]; new kills = PlayerInfo[targetid][pKills]; new name[MAX_PLAYER_NAME]; GetPlayerName(targetid, name, sizeof(name)); new Float:px,Float:py,Float:pz; GetPlayerPos(targetid, px, py, pz); new coordsstring[256]; new bank = PlayerInfo[targetid][pBank]; SendClientMessage(playerid, COLOR_GREEN,"________________________________________________"); format(coordsstring, sizeof(coordsstring),"*** %s ***",name); SendClientMessage(playerid, COLOR_WHITE,coordsstring); format(coordsstring, sizeof(coordsstring), "Убийства:[%d] Смерти:[%d] Деньги:[$%d] Банк:[$%d]",kills,deaths,cash,bank); SendClientMessage(playerid, COLOR_GRAD5,coordsstring); SendClientMessage(playerid, COLOR_GREEN,"________________________________________________"); } } public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z) { if(IsPlayerConnected(playerid)) { new Float:oldposx, Float:oldposy, Float:oldposz; new Float:tempposx, Float:tempposy, Float:tempposz; GetPlayerPos(playerid, oldposx, oldposy, oldposz); tempposx = (oldposx -x); tempposy = (oldposy -y); tempposz = (oldposz -z); if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi))) { return 1; } } return 0; } public ABroadCast(color,const string[],level) { for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { SendClientMessage(i, color, string); printf("%s", string); } } return 1; } public CustomPickups() { for(new i = 0; i < MAX_PLAYERS; i++) { if (PlayerToPoint(3, i,-2054.6311,456.6516,35.1719)) // Bank outside { GameTextForPlayer(i, "~y~Welcome to The ~y~City Bank~n~~w~Type /enter to go in", 5000, 5); } } return 1; } #endif