Скачал плагин банк на сервер,редактировал его,НО возникла проблема,что банк сохраняет по steamid,у некоторых игроков,появляются чужие деньги,кто знает,как это исправить,отпишитесь
Вот стандартный код банка:
#define SQLON 0 // 1 = Use SQL | 0 = Use file
#include #include #include
new HELPPAGE[] = "http://translate.google.lv/translate?js=y&prev=_t&hl=ru&ie=UTF-8&layout=1&eotf=1&u=http%3A%2F%2Fhome.netcom.com%2F~everco_ice%2Fbankhelp17.html&sl=en&tl=ru"
new bool:canuse[33] = false new interest[33] = 0 new bankfees = 0 new rounds = 0 new sayspecial[33] = 0
#if SQLON #include #else #include #endif
#if SQLON new Sql:dbc new Result:result #else new allowfilepath[251] #endif
public plugin_init() { register_plugin("AMX Bank","1.7","twistedeuphoria") register_concmd("bank_create","bank_create",ADMIN_USER,"Создать банковский счёт.") register_concmd("bank_close","bank_close",ADMIN_CVAR,"Закрыть банк.") register_concmd("bank_open","bank_open",ADMIN_CVAR,"Открыть банк для бизнеса.") register_concmd("bank_amount","bank_amount",ADMIN_USER,"Средства на счету") register_concmd("bank_deposit","bank_deposit",ADMIN_USER," :Положить средства на счет.") register_concmd("bank_withdraw","bank_withdrawl",ADMIN_USER," :Забрать средства со счета.") register_concmd("bank_help","bank_help",ADMIN_USER,"Помощь.") register_concmd("bank_menu","bank_menu",ADMIN_USER,"Открыть меню банка.") register_concmd("maxdep","deposit_maximum",ADMIN_USER,"Положить в банк все средства") register_concmd("maxwit","withdrawl_maximum",ADMIN_USER,"Забрать 16.000$.") register_clcmd("say","say_cheese") register_clcmd("say_team","say_cheese")
register_cvar("bank_default_opening","10000") //стоймость открытия счета register_cvar("bank_state","1") register_cvar("bank_min_players","3") // сколько надо человек на серве,чтобы банк открывался register_cvar("bank_restrict","0") // 0 = Все игроки могут использувать банк 1 = Только пользователи, определены в файле or или SQL register_cvar("bank_interest_rounds","50") register_cvar("bank_interest_rate","0.01") register_cvar("bank_fees_base","0") //Base bank fee in $ register_cvar("bank_fees_increase","0") //Добавлено в базу плата за каждую транзакцию в круглом register_cvar("bank_offrounds","3") //Сколько раундов с начала карта будет банк отключен register_cvar("bank_msg_interval","60") register_cvar("bank_msg","На сервере установлен БАНК,чтобы открыть введите в чате или консоле /bank.") register_cvar("bank_use_ip","0") register_menucmd(register_menuid("Bank Menu:"),1023,"bank_menu_cmd") register_logevent("giveinterest",2,"0=World triggered","1=Round_Start") register_event("Money", "hookmoney", "b") #if SQLON set_task(5.0,"sqlinit") #else new directory[201] get_configsdir(directory,200) if(get_cvar_num("bank_restrict") == 2) { formatex(allowfilepath,250,"%s/bankusers.ini",directory) if(!file_exists(allowfilepath)) { new writestr[101] formatex(writestr,100,";Put all users who can use the bank in here.") write_file(allowfilepath,writestr) } } #endif set_task(float(get_cvar_num("bank_msg_interval")),"bank_spam") }
public check_use(id,pos) { if(id) { if(canuse[id] == false) { if(pos) client_print(id,print_chat,"[БАНК] Вам запрещено использовать банк.") else console_print(id,"[БАНК] Вас запрещено использовать банк.") return 0 } } new cvarrounds = get_cvar_num("bank_offrounds") if(rounds <= cvarrounds) { if(pos) client_print(id,print_chat,"[БАНК] Банк будет доступен на %d раунде.",cvarrounds) else console_print(id,"БАНК] Банк будет доступен на %d раунде.",cvarrounds) return 0 } if(!get_cvar_num("bank_state")) { if(pos) client_print(id,print_chat,"[БАНК] Извините, банк временно не работает,повторите попытку позже.") else console_print(id,"[БАНК] Извините, банк временно не работает,повторите попытку позже.") return 0 } new players = get_playersnum() new minplayers = get_cvar_num("bank_min_players") if(players < minplayers) { if(pos) client_print(id,print_chat,"[БАНК] Нужно,минимум %d игроков, что-бы использовать банк.",minplayers) else console_print(id,"[БАНК] Нужно,минимум %d игроков, что-бы использовать банк.",minplayers) return 0 } return 1 }
public get_balance(id) { new sid[35] new balance = -1 if(get_cvar_num("bank_use_ip")) get_user_ip(id,sid,34) else get_user_authid(id,sid,34) #if SQLON result = dbi_query(dbc,"SELECT * FROM bank WHERE sid = '%s'",sid) if(result == RESULT_NONE) dbi_free_result(result) else { dbi_nextrow(result) balance = dbi_result(result,"amount") dbi_free_result(result) } #else new key[51] formatex(key,50,"%s_account",sid) if(vaultdata_exists(key)) { new balancestr[21] get_vaultdata(key,balancestr,20) balance = str_to_num(balancestr) } #endif return balance }
public set_balance(id,balance) { new sid[35] if(get_cvar_num("bank_use_ip")) get_user_ip(id,sid,34) else get_user_authid(id,sid,34) #if SQLON result = dbi_query(dbc,"UPDATE bank SET amount = '%d' WHERE sid = '%s'",balance,sid) if(result == RESULT_NONE) { dbi_free_result(result) return -1 } else return 1 #else new key[51] formatex(key,50,"%s_account",sid) if(vaultdata_exists(key)) { new balancestr[21] num_to_str(balance,balancestr,20) set_vaultdata(key,balancestr) return 1 } else return -1 #endif return -1 }
public bank_menu(id) { new client = 0 if(read_argc() > 1) client = 1 if(!check_use(id,client)) return PLUGIN_HANDLED new menubody[276], keys = 0,len new bool:hasacc = true len = format(menubody,275,"\yBank Menu:\w^n") if(get_balance(id) == -1) { hasacc = false len += format(menubody[len],275-len,"1. Создать банковский счёт^n\d") keys |= (1<<0|1<<9) } else len += format(menubody[len],275-len,"\d1. Создать банковский счет^n\w") len += format(menubody[len],275-len,"\d2. Средста на счету^n\w") len += format(menubody[len],275-len,"\d3. Положить средства на счет^n\w") len += format(menubody[len],275-len,"\d4. Положить все средства на счет^n\w") len += format(menubody[len],275-len,"\d5. Забрать средства со счета^n\w") len += format(menubody[len],275-len,"\d6. Забрать все средства со счета^n\w") len += format(menubody[len],275-len,"\d7. Помощь^n\w") if(hasacc) { len += format(menubody[len],275-len,"0. Выход") keys |= (1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<9) } else len += format(menubody[len],275-len,"\w0. Выход") show_menu(id,keys,menubody,-1,"Bank Menu:") return PLUGIN_CONTINUE }
public bank_menu_cmd(id,key) { switch(key) { case 0: client_cmd(id,"bank_create 1") case 1: client_cmd(id,"bank_amount 1") case 2: { sayspecial[id] = 1 client_print(id,print_chat,"[БАНК] Пожалуйста,напишите в чат сумму, которое вы хотите внести на счет:") } case 3: client_cmd(id,"maxdep") case 4: { sayspecial[id] = 2 client_print(id,print_chat,"[БАНК] Пожалуйста,напишите в чат сумму, которое вы хотите снять со счета:") } case 5: client_cmd(id,"maxwit") case 6: client_cmd(id,"bank_help") case 7: } return PLUGIN_HANDLED }
public hookmoney() { if(!get_cvar_num("bank_state")) return PLUGIN_CONTINUE new curmoney = read_data(1) if(curmoney < 16000) return PLUGIN_CONTINUE new id for(new inum=0;inum<=32;inum++) { if(!is_user_connected(inum)) continue new rmoney = cs_get_user_money(inum) if(rmoney == curmoney) { id = inum break; } } if(canuse[id] == false) return PLUGIN_CONTINUE new cvarrounds = get_cvar_num("bank_offrounds") if(rounds <= cvarrounds) return PLUGIN_CONTINUE if(get_playersnum() >= get_cvar_num("bank_min_players")) { new balance = get_balance(id) if(balance == -1) return PLUGIN_CONTINUE balance += 10000 set_balance(id,balance) cs_set_user_money(id,curmoney-10000) client_print(id,print_chat,"[БАНК] $10000 было зачислено на ваш счет.У Вас $%d на счету.",balance) } return PLUGIN_CONTINUE }
public bank_spam() { new cvarval = get_cvar_num("bank_state") if(cvarval) { new message[256] get_cvar_string("bank_msg",message,255) client_print(0,print_chat,message) } set_task(float(get_cvar_num("bank_msg_interval")),"bank_spam") }
public bank_help(id) { show_motd(id,HELPPAGE,"Bank Help") }
public giveinterest() { rounds++ if(!check_use(0,1)) return PLUGIN_CONTINUE bankfees = get_cvar_num("bank_fees_base") new Float:rate = get_cvar_float("bank_interest_rate") new irounds = get_cvar_num("bank_interest_rounds") if(!get_cvar_num("bank_state")) return PLUGIN_CONTINUE for(new i = 1;i<=32;i++) { if(is_user_connected(i)) { if(canuse[i]) { interest[i]++ if(interest[i] >= irounds) { interest[i] = 0 new balance = get_balance(i) if(balance != -1) { new Float:give = floatmul(rate,float(balance)) new givint = floatround(give) if(givint > 0) { new allowed = 16000 - cs_get_user_money(i) if(givint <= allowed) { cs_set_user_money(i,cs_get_user_money(i)+givint) client_print(i,print_chat,"[БАНК] Вы получили $%d.",givint) } else { new dep = givint - allowed client_print(i,print_chat,"[БАНК] Вы получили $%d в выгоду $%d, которые зачислены на ваш счет.",givint,dep) cs_set_user_money(i,16000) balance += dep set_balance(i,balance) } } } } } } } return PLUGIN_CONTINUE }
public client_putinserver(id) { interest[id] = 0 canuse[id] = false switch(get_cvar_num("bank_restrict")) { case 0: { canuse[id] = true } case 1: { if(access(id,ADMIN_CHAT)) canuse[id] = true else canuse[id] = false } case 2: { canuse[id] = false new sid[35] if(get_cvar_num("bank_use_ip")) get_user_ip(id,sid,34,1) else get_user_authid(id,sid,34) #if SQLON result = dbi_query(dbc,"SELECT * FROM bankusers WHERE sid = '%s'",sid) if(result == RESULT_NONE) canuse[id] = false else canuse[id] = true dbi_free_result(result) #else new retstr[35],a,i while(read_file(allowfilepath,i,retstr,34,a)) { if(equali(sid,retstr)) canuse[id] = true i++ } #endif } } }
public client_disconnect(id) { canuse[id] = false interest[id] = 0 }
public deposit_maximum(id) { if(!check_use(id,1)) return PLUGIN_HANDLED new curmoney = cs_get_user_money(id) new balance = get_balance(id) if(balance == -1) { client_print(id,print_chat,"[БАНК] У Вас нету банковского счета.") return PLUGIN_HANDLED } balance += curmoney set_balance(id,balance) cs_set_user_money(id,0) client_print(id,print_chat,"[БАНК] Вы положили $%d на банковский счет.У Вас $%d на счету.",curmoney,balance) return PLUGIN_HANDLED }
public withdrawl_maximum(id) { if(!check_use(id,1)) return PLUGIN_HANDLED new balance = get_balance(id) if(balance == -1) { client_print(id,print_chat,"[БАНК] У Вас нету банковского счета.") return PLUGIN_HANDLED } new curmoney = cs_get_user_money(id) new maxmoney = 16000 - cs_get_user_money(id) if(maxmoney > balance) maxmoney = balance balance -= maxmoney cs_set_user_money(id,curmoney + maxmoney,1) if((balance - bankfees) > 0) balance -= bankfees else cs_set_user_money(id,cs_get_user_money(id) - bankfees) if(bankfees > 0) client_print(id,print_chat,"[БАНК] Вы заплатили $%d в денежных сборах.",bankfees) bankfees += get_cvar_num("bank_fees_increase") set_balance(id,balance) client_print(id,print_chat,"[БАНК] Вы взяли $%d с банковского счета.У Вас $%d на счету.",maxmoney,balance) return PLUGIN_HANDLED }
public bank_amount(id) { new client = 0 if(read_argc() > 1) client = 1 if(!check_use(id,client)) return PLUGIN_HANDLED new balance = get_balance(id) if(balance == -1) { if(client) client_print(id,print_chat,"[БАНК] У Вас нету банковского счета.") else console_print(id,"[БАНК] У Вас нету банковского счета.") return PLUGIN_HANDLED } else { if(client) client_print(id,print_chat,"[БАНК] У Вас $%d на банковском счету.",balance) else console_print(id,"[БАНК] У Вас $%d на банковском счету.",balance) } return PLUGIN_HANDLED }
public bank_open(id,level,cid) { if(!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED new client = 0 if(read_argc() > 1) client = 1 if(get_cvar_num("bank_state")) { if(client) client_print(id,print_chat,"[БАНК] Банк уже открыт.") else console_print(id,"[БАНК] Банк уже открыт.") } else { console_cmd(id,"amx_cvar bank_state 1") if(get_cvar_num("bank_state")) { if(client) client_print(id,print_chat,"[БАНК] Банк сейчас доступен.") else console_print(id,"[БАНК] Банк сейчас доступен.") client_print(0,print_chat,"[БАНК] Банк сейчас доступен для бизнеса.") } else { if(client) client_print(id,print_chat,"[БАНК] Вы, не можете открыть банк.") else console_print(id,"[БАНК] Вы, не можете открыть банк.") } } return PLUGIN_HANDLED }
public bank_close(id,level,cid) { if(!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED new client = 0 if(read_argc() > 1) client = 1 if(!get_cvar_num("bank_state")) { if(client) client_print(id,print_chat,"[БАНК] Банк закрыт.") else console_print(id,"[БАНК] Банк закрыт.") } else { console_cmd(id,"amx_cvar bank_state 0") if(!get_cvar_num("bank_state")) { if(client) client_print(id,print_chat,"[БАНК] Банк сейчас недоступен.") else console_print(id,"[БАНК] Банк сейчас недоступен.") client_print(0,print_chat,"[БАНК] Банк сейчас недоступен.") } else { if(client) client_print(id,print_chat,"[БАНК] Вы, не можете закрытвать банк.") else console_print(id,"[БАНК] Вы, не можете закрывать банк.") } } return PLUGIN_HANDLED }
public sqlinit() { #if SQLON new error[32],sqlhostname[35],sqluser[35],sqlpass[35],sqldbname[35] get_cvar_string("amx_sql_host",sqlhostname,34) get_cvar_string("amx_sql_user",sqluser,34) get_cvar_string("amx_sql_pass",sqlpass,34) get_cvar_string("amx_sql_db",sqldbname,34) dbc = dbi_connect(sqlhostname,sqluser,sqlpass,sqldbname,error,31) if(dbc == SQL_FAILED) { server_print("Could not connect.") return PLUGIN_HANDLED } result = dbi_query(dbc,"CREATE TABLE IF NOT EXISTS `bank` (`sid` VARCHAR(35), `amount` BIGINT(20))") dbi_free_result(result) result = dbi_query(dbc,"CREATE TABLE IF NOT EXISTS `bankusers` (`sid` VARCHAR(35), `comments` VARCHAR(100))") dbi_free_result(result) #endif return 1 }
public bank_create(id) { new client = 0 if(read_argc() > 1) client = 1 if(!check_use(id,client)) return PLUGIN_HANDLED new curmoney,neededmoney, amount neededmoney = get_cvar_num("bank_default_opening") curmoney = cs_get_user_money(id) if(curmoney >= neededmoney) { amount = neededmoney curmoney -= neededmoney } else { amount = curmoney curmoney = 0 } #if SQLON new sid[35] if(get_cvar_num("bank_use_ip")) get_user_ip(id,sid,34,1) else get_user_authid(id,sid,34) result = dbi_query(dbc,"SELECT * FROM bank WHERE sid = '%s'",sid) if(result != RESULT_NONE) { if(client) client_print(id,print_chat,"[БАНК] У Вас уже есть банковский счет!") else console_print(id,"[БАНК] У Вас уже есть банковский счет!") return PLUGIN_HANDLED } dbi_free_result(result) result = dbi_query(dbc,"INSERT INTO bank VALUES ( '%s' , '%d')",sid,amount) dbi_free_result(result) #else new sid[35],key[51] if(get_cvar_num("bank_use_ip")) get_user_ip(id,sid,34,1) else get_user_authid(id,sid,34) format(key,50,"%s_account",sid) if(vaultdata_exists(key)) { if(client) client_print(id,print_chat,"[БАНК] У Вас уже есть банковский счет!") else console_print(id,"[БАНК] У Вас уже есть банковский счет!") return PLUGIN_HANDLED } new saveamstr[21] num_to_str(amount,saveamstr,20) set_vaultdata(key,saveamstr) #endif cs_set_user_money(id,curmoney) if(client) client_print(id,print_chat,"[БАНК] Банковский счет создан .",amount) else console_print(id,"[БАНК] Банковский счет создан .",amount) return PLUGIN_HANDLED }
public bank_withdrawl(id) { new client = 0 if(read_argc() > 2) client = 1 if(!check_use(id,client)) return PLUGIN_HANDLED new balance = get_balance(id) if(balance == -1) { if(client) client_print(id,print_chat,"[БАНК] У Вас нету банковского счета.") else console_print(id,"[БАНК] У Вас нету банковского счета.") return PLUGIN_HANDLED } new ams[9],amn,maxam read_args(ams,8) amn = str_to_num(ams) if(amn <= 0) return PLUGIN_HANDLED maxam = 16000 - cs_get_user_money(id) if(amn > maxam) amn = maxam if(amn > balance) { if(client) client_print(id,print_chat,"[БАНК] Не хватает средств на банковском счету.") else console_print(id,"[БАНК] Не хватает средств на банковском счету.") return PLUGIN_HANDLED } balance -= amn cs_set_user_money(id,cs_get_user_money(id) + amn) if(balance >= bankfees) balance -= bankfees else cs_set_user_money(id,cs_get_user_money(id) - bankfees) set_balance(id,balance) if(bankfees > 0) { if(client) client_print(id,print_chat,"[БАНК] Вы заплатили $%d.",bankfees) else console_print(id,"[БАНК] Вы заплатили $%d.",bankfees) } bankfees += get_cvar_num("bank_fees_increase") if(client) client_print(id,print_chat,"[БАНК] Ты снял $%d с банковского счёта.Остаток $%d.",amn,balance) else console_print(id,"[БАНК] Ты снял $%d с банковского счёта.Остаток $%d.",amn,balance) return PLUGIN_HANDLED }
public bank_deposit(id) { new client = 0 if(read_argc() > 2) client = 1 if(!check_use(id,client)) return PLUGIN_HANDLED new damounts[9],damount,curmoney read_args(damounts,8) damount = str_to_num(damounts) if(damount <= 0) return PLUGIN_HANDLED curmoney = cs_get_user_money(id) if(damount > curmoney) { if(client) client_print(id,print_chat,"[БАНК] У вас нет столько средств.") else console_print(id,"[BANK] У вас нет столько средств.") return PLUGIN_HANDLED } new balance = get_balance(id) if(balance == -1) { if(client) client_print(id,print_chat,"[[БАНК] У Вас нету банковского счета.") else console_print(id,"[БАНК] У Вас нету банковского счета.") return PLUGIN_HANDLED } balance += damount set_balance(id,balance) cs_set_user_money(id,curmoney - damount) if(client) client_print(id,print_chat,"[БАНК] Ты положил $%d на счёт.У тебя $%d на счету.",damount,balance) else console_print(id,"[БАНК] Ты положил $%d на счёт.У тебя $%d на счету.",damount,balance) return PLUGIN_HANDLED }