HoRRoR | Дата: Среда, 03.06.2009, 10:29:15 | Сообщение # 1 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| сабж. на сервере (нон-стим) стоит маяк. сервак - Zombie Plague. аммобанк соответственно (т.к. сервер нон-стим) работает криво - steamid у всех меняются и аммопаки в банке "скачут" - то 0 то 80 то 33. необходимо сделать привязку через серийный номер жесткого диска. в своё время набрёл на тему: https://ssl.roger.net.ru/mantis/bug_view_advanced_page.php?bug_id=686 код самого банка: Code #include <amxmodx> #include <amxmisc> #include <zombieplague> #include <nvault> stock const ZP_BANK_FMT[] = "^x04[AmmoBank]^x01 %L" new g_iAmmoPacks[33] new g_iSessionMovement[33] new g_szAuth[33][36] new cvAnnounceTime new cvBankMax new g_hVault
LoadClient(id, szAuth[]) { static szValue[32], iTimestamp new iValue = 0 if(nvault_lookup(g_hVault, szAuth, szValue, charsmax(szValue), iTimestamp) && is_str_num(szValue)) iValue = (g_iAmmoPacks[id] = str_to_num(szValue)) SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_LOAD", iValue, szAuth) }
SaveClient(id, szAuth[]) { static szValue[32] num_to_str(g_iAmmoPacks[id] + g_iSessionMovement[id], szValue, charsmax(szValue)) nvault_set(g_hVault, szAuth, szValue) }
public plugin_init() { register_clcmd("say", "Command_Say") register_dictionary("zp_bank.txt") cvAnnounceTime = register_cvar("zp_bank_announce_time", "300") cvBankMax = register_cvar("zp_bank_max", "100") Task_Announce() g_hVault = nvault_open("db_ammobank") if(g_hVault == INVALID_HANDLE) set_fail_state("Can't create/load vault 'db_ammobank'")
}
public plugin_end() { // Client's should have already been saved by now (client_disconnect is called before plugin_end). // But it costs nothing to be sure. new iPlayers[32], iNum get_players(iPlayers, iNum) new iPlayer for(new i=0; i < iNum;i++) { iPlayer = iPlayers[i] SaveClient(iPlayer, g_szAuth[iPlayer]) } nvault_close(g_hVault) }
public client_putinserver(id) { static szAuth[36] get_user_authid(id, szAuth, charsmax(szAuth)) copy(g_szAuth[id], charsmax(g_szAuth[]), szAuth) LoadClient(id, szAuth) }
public client_disconnect(id) { SaveClient(id, g_szAuth[id]) g_szAuth[id][0] = 0 g_iAmmoPacks[id] = 0 g_iSessionMovement[id] = 0 }
new msgSayText = -1 stock bool:SayText(const receiver, sender, const msg[], any:...) { if(msgSayText == -1) msgSayText = get_user_msgid("SayText") if(msgSayText) { if(!sender) sender = receiver static buffer[512] vformat(buffer,charsmax(buffer), msg, 4) if(receiver) message_begin(MSG_ONE_UNRELIABLE,msgSayText,_,receiver) else message_begin(MSG_BROADCAST,msgSa yText) w rite_byte(sender) write_string(buffer) message_end() return true } return false }
public Task_Announce() { static iPlayers[32], iNum, iPlayer get_players(iPlayers, iNum) for(new i=0; i < iNum;i++) { iPlayer = iPlayers[i] SayText(iPlayer, iPlayer, ZP_BANK_FMT, LANG_PLAYER, "ZP_BANK_ANNOUNCE") } set_task(get_pcvar_float(cvAnnounceTime), "Task_Announce") }
enum { CMD_DEPOSIT = 1, CMD_WITHDRAW, CMD_INFO }
public Command_Say(id) { static szArgs[32] read_args(szArgs, charsmax(szArgs)) remove_quotes(szArgs) static szArg1[32], szArg2[32] parse(szArgs, szArg1, charsmax(szArg1), szArg2, charsmax(szArg2)) new iCommand = 0 if(equali(szArg1, "/deposit")) iCommand = CMD_DEPOSIT else if(equali(szArg1, "/withdraw")) iCommand = CMD_WITHDRAW else if(equali(szArg1, "/dp")) iCommand = CMD_DEPOSIT else if(equali(szArg1, "/wd")) iCommand = CMD_WITHDRAW else if(equali(szArg1, "/bank")) iCommand = CMD_INFO if(iCommand) { if(iCommand == CMD_INFO) Command_Info(id) else { new iValue = str_to_num(szArg2) if(iValue <= 0) SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_INVALID_AMOUNT") else if(iCommand == CMD_DEPOSIT) Command_Deposit(id, iValue) else Command_Withdraw(id, iValue) } return PLUGIN_HANDLED } return PLUGIN_CONTINUE }
Command_Info(id) { SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_LOAD", g_iAmmoPacks[id] + g_iSessionMovement[id], g_szAuth[id]) } Command_Deposit(id, iDeposit) { new iCurrentAmount = zp_get_user_ammo_packs(id) if(!iCurrentAmount) { SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_NO_AMMO") return } if(iDeposit > iCurrentAmount) iDeposit = iCurrentAmount new iCurrent = g_iAmmoPacks[id] + g_iSessionMovement[id] new iSum = iCurrent + iDeposit new iBankMax = get_pcvar_num(cvBankMax) if(iBankMax && iSum > iBankMax) { iDeposit = iBankMax - iCurrent iSum = iBankMax SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_MAX", iBankMax) } if(iDeposit) { g_iSessionMovement[id] += iDeposit SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_DEPOSIT", iDeposit, iSum) // zp_set_user_ammo_packs(id, iCurrentAmount - iDeposit) } }
Command_Withdraw(id, iWithdraw) { new iDeposited = g_iAmmoPacks[id] + g_iSessionMovement[id] if(!iDeposited) { SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_EMPTY") return } if(iWithdraw > iDeposited) iWithdraw = iDeposited g_iSessionMovement[id] -= iWithdraw SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_WITHDRAW", iWithdraw, iDeposited - iWithdraw) zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + iWithdraw) } прошу помощи p.s. поздно прочитал правила раздела. перенесите плз тему в http://amxmodx.ucoz.ru/forum/19 прошу простить
Сообщение отредактировал HoRRoR - Среда, 03.06.2009, 10:31:59 |
|
| |
Zefir | Дата: Среда, 03.06.2009, 11:20:46 | Сообщение # 2 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Не в сети
| Не понятно что такое аммобанк, но если имеется ввиду AmxBans, то на том же форуме через который распространяеться MyAC, есть и несколько решений по связке этих продуктов. Так что лучше наверно туда...
Чтобы правильно задать вопрос, нужно знать больше половины ответа... Cerberus(Цербер) - начато публичное тестирование Энциклопедия Counter-Strike
|
|
| |
Rockon | Дата: Среда, 03.06.2009, 11:48:40 | Сообщение # 3 |
Подполковник
Группа: Скриптеры
Сообщений: 137
Статус: Не в сети
| амобанк - это плагин, который амопаки на ЗМ сохраняет для игроков.
|
|
| |
Zefir | Дата: Среда, 03.06.2009, 12:14:42 | Сообщение # 4 |
Майор
Группа: Пользователи
Сообщений: 83
Статус: Не в сети
| Quote (Rockon) амобанк - это плагин, который амопаки на ЗМ сохраняет для игроков. Оопс сорри, не слыхал просто, а из топике не все понятно было... Я теперь знаю какой следующий плагин затачивать под своего Цербера буду Варик работает, и експу не уведешь. Гангейм тоже переделал, статистику считает четко по аккам, с зомби еще не сталкивался, но чуствую прийдеться...
Чтобы правильно задать вопрос, нужно знать больше половины ответа... Cerberus(Цербер) - начато публичное тестирование Энциклопедия Counter-Strike
|
|
| |
Vladimirok | Дата: Среда, 03.06.2009, 19:46:33 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| А не проще зделать на MySQL и вход на сервер по паролям?) Очень эфективно и не тупит если сервак MySQL стоит на тойже машине что и сервак HLDS.
|
|
| |