AMX MOD X
Среда, 24.04.2024, 19:19:52



Приветствую Вас Гость | RSS
[ Главная ] [ привязка аммобанка к серийному номеру винчестера - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » привязка аммобанка к серийному номеру винчестера
привязка аммобанка к серийному номеру винчестера
HoRRoRДата: Среда, 03.06.2009, 10:29:15 | Сообщение # 1
Полковник
Группа: Скриптеры
Сообщений: 181
Репутация: 8
Статус: Не в сети
сабж. на сервере (нон-стим) стоит маяк. сервак - 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
Репутация: 5
Статус: Не в сети
Не понятно что такое аммобанк, но если имеется ввиду AmxBans, то на том же форуме через который распространяеться MyAC, есть и несколько решений по связке этих продуктов.
Так что лучше наверно туда...


Чтобы правильно задать вопрос, нужно знать больше половины ответа...
Cerberus(Цербер) - начато публичное тестирование
Энциклопедия Counter-Strike
 
RockonДата: Среда, 03.06.2009, 11:48:40 | Сообщение # 3
Подполковник
Группа: Скриптеры
Сообщений: 137
Репутация: 1
Статус: Не в сети
амобанк - это плагин, который амопаки на ЗМ сохраняет для игроков.
 
ZefirДата: Среда, 03.06.2009, 12:14:42 | Сообщение # 4
Майор
Группа: Пользователи
Сообщений: 83
Репутация: 5
Статус: Не в сети
Quote (Rockon)
амобанк - это плагин, который амопаки на ЗМ сохраняет для игроков.

Оопс :) сорри, не слыхал просто, а из топике не все понятно было...

Я теперь знаю какой следующий плагин затачивать под своего Цербера буду :)
Варик работает, и експу не уведешь. Гангейм тоже переделал, статистику считает четко по аккам, с зомби еще не сталкивался, но чуствую прийдеться...


Чтобы правильно задать вопрос, нужно знать больше половины ответа...
Cerberus(Цербер) - начато публичное тестирование
Энциклопедия Counter-Strike
 
VladimirokДата: Среда, 03.06.2009, 19:46:33 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
А не проще зделать на MySQL и вход на сервер по паролям?) Очень эфективно и не тупит если сервак MySQL стоит на тойже машине что и сервак HLDS.
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » привязка аммобанка к серийному номеру винчестера
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024