z051002
发表于 2009-7-7 21:59:35
没玩过DOD,DOD是通过什么函数换服装的?
Rulzy 发表于 2009-7-7 18:01 http://www.dt-club.net/forum/images/common/back.gif
我DOD没有使用换服装插件,但在经常换图后群踢一下,谢谢!!!
20576526
发表于 2009-7-7 22:28:59
Rulzy 我们永支持你呀,谢谢有发了这么好的插件在次感谢:handshake
啊俊771
发表于 2009-7-7 23:07:22
本帖最后由 啊俊771 于 2009-7-7 23:09 编辑
Rulzy 你看这个能帮加上个权限吗?就是只有VIP才可以使用的僵尸银行。
原贴 http://www.dt-club.net/forum/thread-44722-1-1.html
#include <amxmodx>
#include <amxmisc>
#include <zombieplague>
#define USING_SQL
#if defined USING_SQL
#include <sqlx>
#else
#include <nvault>
#endif
stock const ZP_BANK_FMT[] = "^x04^x01 %L"
new g_iAmmoPacks
new g_iSessionMovement
new g_szAuth
new cvAnnounceTime
new cvBankMax
#if defined USING_SQL
new g_szSQLTable, Handle:g_hSQLTuple, g_szQuery
LoadClient(id, szAuth[])
{
formatex(g_szQuery, charsmax(g_szQuery),
"SELECT amount FROM `%s` WHERE auth='%s'",
g_szSQLTable, szAuth)
new cData
cData = id
copy(cData, charsmax(cData)-1, szAuth)
SQL_ThreadQuery(g_hSQLTuple, "LoadClient_QueryHandler", g_szQuery, cData, strlen(cData))
}
public LoadClient_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
{
if(iFailState != TQUERY_SUCCESS)
{
log_amx("LoadClient(): SQL Error #%d - %s", iErrnum, szError)
return
}
new id = cData
static szAuth
copy(szAuth, charsmax(szAuth), cData)
new iAmmoPacks = 0
if(SQL_NumResults(hQuery))
iAmmoPacks = SQL_ReadResult(hQuery, 0)
//SQL_QueryAndIgnore("INSERT INTO `%s` SET auth='%s'", g_szSQLTable, szAuth)
g_iAmmoPacks = iAmmoPacks
SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_LOAD", iAmmoPacks, szAuth)
}
SaveClient(id, szAuth[])
{
new iDifference = g_iSessionMovement
formatex(g_szQuery, charsmax(g_szQuery),
"INSERT INTO `%s` SET auth='%s', amount=%d ON DUPLICATE KEY UPDATE amount=amount+(%d)",
g_szSQLTable, szAuth, iDifference, iDifference)
SQL_ThreadQuery(g_hSQLTuple, "SaveClient_QueryHandler", g_szQuery)
}
public SaveClient_QueryHandler(iFailState, Handle:hQuery, szError[], iErrnum, iData[], iSize, Float:fQueueTime)
{
if(iFailState != TQUERY_SUCCESS)
log_amx("SaveClient(): SQL Error #%d - %s", iErrnum, szError)
}
#else
new g_hVault
LoadClient(id, szAuth[])
{
static szValue, iTimestamp
new iValue = 0
if(nvault_lookup(g_hVault, szAuth, szValue, charsmax(szValue), iTimestamp) && is_str_num(szValue))
iValue = (g_iAmmoPacks = str_to_num(szValue))
SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_LOAD", iValue, szAuth)
}
SaveClient(id, szAuth[])
{
static szValue
num_to_str(g_iAmmoPacks + g_iSessionMovement, szValue, charsmax(szValue))
nvault_set(g_hVault, szAuth, szValue)
}
#endif
public plugin_init()
{
register_plugin(" Ammo Bank", "1.0", "danielkza")
register_clcmd("say", "Command_Say")
register_dictionary("zp_bank.txt")
cvAnnounceTime = register_cvar("zp_bank_announce_time", "60")
cvBankMax = register_cvar("zp_bank_max", "2000")
Task_Announce()
#if defined USING_SQL
new configsDir
get_configsdir(configsDir, 63)
// Declare standard SQL cvars so we don't depend on admin.amxx
register_cvar("amx_sql_host", "127.0.0.1")
register_cvar("amx_sql_user", "root")
register_cvar("amx_sql_pass", "")
register_cvar("amx_sql_db", "amx")
register_cvar("amx_sql_type", "mysql")
new cvTable = register_cvar("zp_bank_table", "zp_bank")
// Execute SQL configs. You must put zp_bank_table in there
server_cmd("exec %s/sql.cfg", configsDir)
server_exec()
get_pcvar_string(cvTable, g_szSQLTable, charsmax(g_szSQLTable))
g_hSQLTuple = SQL_MakeStdTuple()
new iError, szError
new Handle:hSQLConnection = SQL_Connect(g_hSQLTuple, iError, szError, charsmax(szError))
if(hSQLConnection != Empty_Handle)
{
SQL_QueryAndIgnore(hSQLConnection,
"CREATE TABLE IF NOT EXISTS `%s` (\
auth VARCHAR(36) NOT NULL PRIMARY KEY, \
amount INT(10) UNSIGNED NOT NULL DEFAULT 0 \
) ENGINE=MyISAM DEFAULT CHARSET=utf8;",
g_szSQLTable )
SQL_FreeHandle(hSQLConnection)
}
else
log_amx("plugin_init(): SQL Error #%d - %s", iError, szError)
#else
g_hVault = nvault_open("zp_bank")
if(g_hVault == INVALID_HANDLE)
set_fail_state("Can't create/load vault 'zp_bank'")
#endif
}
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, iNum
get_players(iPlayers, iNum)
new iPlayer
for(new i=0; i < iNum;i++)
{
iPlayer = iPlayers
SaveClient(iPlayer, g_szAuth)
}
#if defined USING_SQL
SQL_FreeHandle(g_hSQLTuple)
#else
nvault_close(g_hVault)
#endif
}
public client_putinserver(id)
{
static szAuth
get_user_name(id, szAuth, charsmax(szAuth))
copy(g_szAuth, charsmax(g_szAuth[]), szAuth)
LoadClient(id, szAuth)
}
public client_disconnect(id)
{
SaveClient(id,g_szAuth)
g_szAuth = 0
g_iAmmoPacks = 0
g_iSessionMovement = 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
vformat(buffer,charsmax(buffer), msg, 4)
if(receiver)
message_begin(MSG_ONE_UNRELIABLE,msgSayText,_,receiver)
else
message_begin(MSG_BROADCAST,msgSayText)
write_byte(sender)
write_string(buffer)
message_end()
return true
}
return false
}
public Task_Announce()
{
static iPlayers, iNum, iPlayer
get_players(iPlayers, iNum)
for(new i=0; i < iNum;i++)
{
iPlayer = iPlayers
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
read_args(szArgs, charsmax(szArgs))
remove_quotes(szArgs)
static szArg1, szArg2
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, "/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 + g_iSessionMovement, g_szAuth)
}
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 + g_iSessionMovement
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 += 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 + g_iSessionMovement
if(!iDeposited)
{
SayText(id, id, ZP_BANK_FMT, id, "ZP_BANK_EMPTY")
return
}
if(iWithdraw > iDeposited)
iWithdraw = iDeposited
g_iSessionMovement -= 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)
}
wcy3002003
发表于 2009-7-8 00:12:46
怪了,怎么r版的插件要用到hamsandwich的?
点通粉丝
发表于 2009-7-8 09:36:35
支持...............
啊俊771
发表于 2009-7-8 18:10:53
这两天经过我混战服测试,服装不会默认读取了,但VIP多了还是会群T。是不是一定要用LZ的模型插件配合?我是用其他的模型插件的。
Rulzy
发表于 2009-7-8 18:25:22
这两天经过我混战服测试,服装不会默认读取了,但VIP多了还是会群T。是不是一定要用LZ的模型插件配合?我是用其他的模型插件的。
啊俊771 发表于 2009-7-8 18:10 http://www.dt-club.net/forum/images/common/back.gif嗯,要像我的插件那样判断,看服装有没有必要更新,如果没必要更新,就不再 cs_set_user_model,否则会增加群T的可能性。
new model;
get_user_info(id, "model", model, 63);
if(!equali(model, g_Model))
{
cs_set_user_model(id, g_Model);
}
使用 cs_reset_user_model 倒没什么影响,因为修改的模块里有判断,如果玩家没有使用 cs_set_user_model 自定义模型,这个函数就相当于什么也没做。
Rulzy
发表于 2009-7-8 18:49:37
已重新修改模块,增加模型判断,看是否还需要重新设置玩家模型。插件也相应做了少许修改。请重新下载。
cao869
发表于 2009-7-8 18:55:26
原来R版还活着,很久没见到雷锋了!
filly
发表于 2009-7-8 19:47:16
R版主,很少见他上来了。。
页:
1
[2]
3
4
5
6
7
8
9
10
11