ZP Ammo Bank
Posted: 2010 Oct 19 22:42
Sveiki taigi noriu padaryti taip. Kai zmogus prisijiunge i serva jam is Mysql duomenu bazes uzkrautu visus ammo i zaidima ir kai zmogus atsijiunge jam ammo pasidetu i duomenu baze ir kad nereiketu rasyt tokiu komandu kaip /pasideti ar atsiimti
Plugino.sma kodas
SMA faila atsisiut galima
http://www.j-s.too.lt/Failai/zp_ammo_bank.rar
Plugino.sma kodas
SMA faila atsisiut galima
http://www.j-s.too.lt/Failai/zp_ammo_bank.rar
Code: Select all
#include <amxmodx>#include <amxmisc>#include <dbi>#include <fakemeta>#include <zombieplague> static const version[] = "1.0";static const plugin[] = "ZP Ammo";static const author[] = "for-free"; enum pcvar{ enable = 0, cap, start} new pcvars[pcvar];new bankstorage[33]; new bool:CreateTables = truenew Sql:gMySQL = SQL_FAILEDnew sql_host, sql_user, sql_passnew sql_db, persistent new g_maxplayersnew g_msgSayText public plugin_init(){ register_plugin(plugin, version, author); register_dictionary("credits_bank.txt"); g_msgSayText = get_user_msgid("SayText") pcvars[enable] = register_cvar("zp_bank", "1"); pcvars[start] = register_cvar("zp_bank_blockstart", "1"); sql_host = register_cvar("zp_sql_host", "localhost"); sql_user = register_cvar("zp_sql_user", "pasword"); sql_pass = register_cvar("zp_sql_pass", "Pasword"); sql_db = register_cvar("zp_sql_db", "usjs_ammo"); persistent = register_cvar("zp_sql_persistence", "0"); register_clcmd("say", "handle_say"); register_clcmd("say_team", "handle_say");} public handle_say(id){ if (!get_pcvar_num(pcvars[enable])) return PLUGIN_CONTINUE; new text[70], arg1[32], arg2[32], arg3[32], arg4[6]; read_args(text, sizeof(text)-1); remove_quotes(text); arg1[0] = '^0'; arg2[0] = '^0'; arg3[0] = '^0'; arg4[0] = '^0'; parse(text, arg1, sizeof(arg1)-1, arg2, sizeof(arg2)-1, arg3, sizeof(arg3)-1); //dbg_log("cmd_say() arg1:#%s# arg2:#%s# arg3:#%s#" arg4:#%s#", arg1, arg2, arg3, arg4); // if the chat line has more than 2 words, we're not interested at all if (arg4[0] == 0) { //strip forward slash if present //if ( equali(arg1, "/", 1) ) format(arg1, 31, arg1[1]); if ( equali(arg1, "/pasideti", 7) ) { if (isdigit(arg2[0]) || (arg2[0] == '-' && isdigit(arg2[1]))) { new value = str_to_num(arg2); store_cash(id, value); return PLUGIN_HANDLED; } else if (equali(arg2, "visus")) { store_cash(id, -1); return PLUGIN_HANDLED; } else if ( arg2[0] == 0 ) { zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "WANT_DEPOSIT"); return PLUGIN_HANDLED; } } else if ( equali(arg1, "/atsiimti", 8) ) { if (isdigit(arg2[0]) || (arg2[0] == '-' && isdigit(arg2[1])) ) { new value = str_to_num(arg2); take_cash(id, value); return PLUGIN_HANDLED; } else if ( arg2[0] == 0 ) { zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "WANT_WITHDRAW"); return PLUGIN_HANDLED; } } else if ( equali(arg1, "/bankas", 5) ) { if ( arg2[0] == 0 ) { zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "BALANCE", bankstorage[id]); zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "BANK_USE"); return PLUGIN_HANDLED; } } else if ( equali(arg1, "/kreditai", 5) ) { showinfo(id); } } return PLUGIN_CONTINUE;} public client_disconnect(id) if ( bankstorage[id] > 0 ) save_data(id); public client_connect(id){ bankstorage[id] = 0; //clear residual before loading retrieve_data(id);} store_cash(id, amnt){ if ( !get_pcvar_num(pcvars[enable]) ) return; if ( amnt == -1 ) { bankstorage[id] += zp_get_user_ammo_packs(id); zp_set_user_ammo_packs(id, 0); } else if ( amnt > 0 ) { new temp = zp_get_user_ammo_packs(id); if ( temp >= amnt ) { if ( bankstorage[id] + amnt ) { bankstorage[id] += amnt zp_set_user_ammo_packs(id, temp - amnt); } } else zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "DONT_HAVE_AMOUNT_STORE"); }} take_cash(id, amnt){ if ( !get_pcvar_num(pcvars[enable]) ) return; if ( amnt == 0 ) return; //otherwise a non terminal loop is possible else if ( amnt > 0 ) { if ( bankstorage[id] >= amnt ) { zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + amnt); bankstorage[id] -= amnt; zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "WITHDRAWED_AMOUNT", amnt); } else { zp_colored_print(id, "^x04[ZP Credits]^x01 %L", id, "WITHDRAW_NO_IN_BANK"); } }} mySQLConnect(){ if ( gMySQL >= SQL_OK ) { if ( !get_pcvar_num(persistent) ) close_mysql(); else return; } static host[64], user[32], pass[32], db[32], error[128]; get_pcvar_string(sql_host, host, 63); get_pcvar_string(sql_user, user, 31); get_pcvar_string(sql_pass, pass, 31); get_pcvar_string(sql_db, db, 31); if ( host[0] == '^0' && user[0] == '^0' && db[0] == '^0' ) { get_cvar_string("amx_mysql_host", host, 63); get_cvar_string("amx_mysql_user", user, 31); get_cvar_string("amx_mysql_pass", pass, 31); get_cvar_string("amx_mysql_db", db, 31); } gMySQL = dbi_connect(host, user, pass, db, error, 127) if ( gMySQL <= SQL_FAILED ) { log_amx("MySQL connect error: '%s' (%s,%s,%s)", error, host, user, db); return; } else if ( CreateTables ) { // Only try to create the tables once static sql[512]; new Result:retval; copy(sql, 511, "CREATE TABLE IF NOT EXISTS `zp_bank` ( `IP` varchar(32) binary NOT NULL default '', `Credits` int(10) NOT NULL default '0', PRIMARY KEY (`IP`) ) TYPE=MyISAM COMMENT='ZP Credits saving table'"); retval = dbi_query(gMySQL, sql); if ( retval <= RESULT_FAILED ) { dbi_error(gMySQL, error, 127); log_amx("Error Making Tables: '%s' - '%s'", error, sql); return; } CreateTables = false; }} close_mysql(){ if ( gMySQL <= SQL_FAILED || get_pcvar_num(persistent) ) return; dbi_close(gMySQL);} save_data(id){ mySQLConnect(); new IP[35]; get_user_ip(id, IP, 29, 1) static error[128], sql[512]; new Result:retval, Result:retvalins; formatex(sql, 511, "SELECT * FROM `zp_bank` WHERE `IP` = '%s'", IP) retval = dbi_query(gMySQL, sql) if ( retval <= RESULT_FAILED ) { dbi_error(gMySQL, error, 127); log_amx("Error Querying MySQL DB for %s: '%s' - '%s'", IP, error, sql); return; } else if ( retval == RESULT_NONE || !dbi_nextrow(retval) ) { formatex(sql, 511, "INSERT INTO `zp_bank` (IP,Credits) VALUES ('%s','%d')", IP, bankstorage[id]); retvalins = dbi_query(gMySQL, sql); if ( retvalins <= RESULT_FAILED ) { dbi_error(gMySQL, error, 127); log_amx("Error Writing MySQL Ammo Packs for %s: '%s' - '%s'", IP, error, sql); return; } } if ( retval >= RESULT_OK ) dbi_free_result(retval); //Update users entry with current data formatex(sql, 511, "UPDATE `zp_bank` SET `Credits`='%d' WHERE IP='%s'", bankstorage[id], IP); retval = dbi_query(gMySQL, sql); if (retval <= RESULT_FAILED) { dbi_error(gMySQL, error, 127); log_amx("Error Writing MySQL XP for %s: '%s' - '%s'", IP, error, sql); return; } //Closes the connection if set not to be persistent close_mysql()} retrieve_data(id){ new IP[35]; get_user_ip(id, IP, 29, 1) mySQLConnect(); if ( gMySQL <= SQL_FAILED ) return; static sql[512], error[128]; new Result:retvalxp; formatex(sql, 511, "SELECT `Credits` FROM `zp_bank` WHERE `IP` = '%s'", IP); retvalxp = dbi_query(gMySQL, sql); if ( retvalxp <= RESULT_FAILED ) { dbi_error(gMySQL, error, 127); log_amx("Error Loading MySQL Credits for %s: '%s' - '%s'", IP, error, sql); return; } else if ( retvalxp == RESULT_NONE || !dbi_nextrow(retvalxp) ) { dbi_error(gMySQL, error, 127); log_amx("No Saved Ammmo Packs Loaded for %s: '%s'", IP, error); if ( retvalxp >= RESULT_OK ) dbi_free_result(retvalxp); //Closes the connection if set not to be persistent close_mysql(); return; } static amp[13]; dbi_field(retvalxp, 1, amp, 12); bankstorage[id] = str_to_num(amp); if ( retvalxp >= RESULT_OK ) dbi_free_result(retvalxp); //Closes the connection if set not to be persistent close_mysql(); // If they have an account don't allow zombie mod to give them 5 ammo packs at beggining if ( get_pcvar_num(pcvars[start]) && bankstorage[id] > 0 ) zp_set_user_ammo_packs(id, 0);} zp_colored_print(target, const message[], any:...){ static buffer[512], i, argscount argscount = numargs() // Send to everyone if (!target) { static player for (player = 1; player <= g_maxplayers; player++) { // Not connected if (!is_user_connected(player)) continue; // Remember changed arguments static changed[5], changedcount // [5] = max LANG_PLAYER occurencies changedcount = 0 // Replace LANG_PLAYER with player id for (i = 2; i < argscount; i++) { if (getarg(i) == LANG_PLAYER) { setarg(i, 0, player) changed[changedcount] = i changedcount++ } } // Format message for player vformat(buffer, sizeof buffer - 1, message, 3) // Send it message_begin(MSG_ONE, g_msgSayText, _, player) write_byte(player) write_string(buffer) message_end() // Replace back player id's with LANG_PLAYER for (i = 0; i < changedcount; i++) setarg(changed[i], 0, LANG_PLAYER) } } // Send to specific target else { /* // Replace LANG_PLAYER with player id for (i = 2; i < argscount; i++) { if (getarg(i) == LANG_PLAYER) setarg(i, 0, target) } */ // Format message for player vformat(buffer, sizeof buffer - 1, message, 3) // Send it message_begin(MSG_ONE, g_msgSayText, _, target) write_byte(target) write_string(buffer) message_end() }} public showinfo(id){ zp_colored_print(id, "^x04[ZP Credits]^x01 Visa informacija pateikta MOTD lange >>", id); show_motd(id,"credits.txt","Kreditu pirkimas")}