AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Request for a AMXX/SQL guru to check this (https://forums.alliedmods.net/showthread.php?t=10309)

slurpycof 02-15-2005 11:33

Request for a AMXX/SQL guru to check this
 
I have written my first plugin based on a map voting one for amx. Since it is the first time, I would appreciate someone looking it over to make sure I didn't do something really stupid that will crash the server, cause a memory leak, etc... I have been running this on my server and it seems to be working great. Here is a webpage that queries the database for the stored results.

http://www.clancof.net/mapstats.php


And here is the code I would like checked.

Code:
/* AMX Mod X script *   sql_maprate *   by Slurpy [COF]([email protected]) * *       Thanks to: *                  devicenull for his SQl tutorial *            p00h map_rate for amx that was the basis for this *                  ALOT of other AMXX scripters whose code I looked through to learn how to do this * *   map vote results saved into a MySQL database. *   tested only on mysql 4.0.xx *   requires sql module enabled! * * *   How can I make my website with this? *     basic PHP page to dislplay results will be available when plugin released */ #include <amxmodx> #include <dbi> new Sql:dbc new Result:result new state[3] new nowstate[3] new plnum new bshow = true new Float:total public plugin_init() {     register_plugin("SQL Map Rank","0.1","Slurpy [COF]")     register_menucmd(register_menuid("What do you think about "),(1<<0)|(1<<1)|(1<<2),"vote_count")     set_task(10.0,"read_rate",777,"",0,"b")     set_task(Float:10.0,"sql_init") } public sql_init() {     new host[64], username[32], password[32], dbname[32], error[32]     get_cvar_string("amx_sql_host",host,64)     get_cvar_string("amx_sql_user",username,32)     get_cvar_string("amx_sql_pass",password,32)     get_cvar_string("amx_sql_db",dbname,32)     dbc = dbi_connect("host","username","password","dbname",error,32)     if (dbc == SQL_FAILED)     log_amx("[AMXX] SQL Connection Failed")     else     {         dbi_query(dbc,"CREATE TABLE IF NOT EXISTS `maprank` ( `map_name` VARCHAR(32) NOT NULL,`good` INT NOT NULL, `okay` INT NOT NULL, `bad` INT NOT NULL, 'total' INT NOT NULL, PRIMARY KEY(`map_name`))")     } } public sql_insert() {     if (dbc == SQL_FAILED) return PLUGIN_CONTINUE     new mapname[33]     get_mapname(mapname,32)     new totalint     totalint = floatround(total)     //Insert map information into the tables     result = dbi_query(dbc,"INSERT INTO maprank (map_name, good, okay, bad, total) values ('%s',%i,%i,%i,%i) ON DUPLICATE KEY UPDATE map_name=map_name, good=good+%i, okay=okay+%i, bad=bad+%i, total=total+%i",mapname,state[0],state[1],state[2],totalint,state[0],state[1],state[2],totalint)     dbi_free_result(result)     return PLUGIN_CONTINUE } public ask_menu() {     new menu[256]     new mapname[33]     get_mapname(mapname,32)     plnum = 0     nowstate[0] = 0     nowstate[1] = 0     nowstate[2] = 0       //Display the voting menu     format(menu,255,"\yWhat do you think about %s?\w^n^n1.  Very Good ! !^n2.  Medium .^n3.  So Bad . . .",mapname)     show_menu(0,(1<<0)|(1<<1)|(1<<2),menu,10)     client_cmd(0,"spk Gman/Gman_Choose2")     set_task(10.0,"end_conduct")     client_print(0,print_chat,"* Conducting a survey of players...") } public vote_count(id,key) {     new name[32]     get_user_name(id,name,31)     switch(key){       case 0: {         client_print(0,print_chat,"* %s selected Very Good!!",name)         state[0]++         nowstate[0]++       }       case 1: {         client_print(0,print_chat,"* %s selected Okay!",name)         state[1]++         nowstate[1]++       }       case 2:{            client_print(0,print_chat,"* %s selected So Bad...",name)            state[2]++            nowstate[2]++       }     }     plnum++ } public end_conduct() {     new Float:ans[3]     new Float:tans[3]     if(nowstate[0] == 0) {         nowstate[0] = 0     }else {         ans[0] = float(nowstate[0]) / float(plnum)     }     if(nowstate[2] == 0) {         nowstate[2] = 0     }else {         ans[2] = float(nowstate[2]) / float(plnum)     }     ans[1] = 1.00 - (ans[0] + ans[2])     client_print(0,print_chat,"* Now Rate : Very Good!!!(%.2f) Medium.(%.2f) So Bad...(%.2f)",ans[0],ans[1],ans[2])         total = float(state[0] + state[1] + state[2])     if(state[0] == 0) {         tans[0] = float(0)     }else {         tans[0] = float(state[0]) / total     }     if(state[2] == 0) {         tans[2] = float(0)     }else {         tans[2] = float(state[2]) / total     }     tans[1] = 1.00 - (tans[0] + tans[2])        client_print(0,print_chat,"* Total Rate : Very Good!!!(%.2f) Medium.(%.2f) So Bad...(%.2f)",tans[0],tans[1],tans[2])           sql_insert()     return PLUGIN_CONTINUE } public read_rate() {     new timeleft = get_timeleft()         if(bshow&&(timeleft>0)&&(timeleft<300)) {         bshow = false         ask_menu()     } }
________
volcano classic review

XxAvalanchexX 02-15-2005 14:59

Re: Request for a AMXX/SQL guru to check this
 
Code:
public plugin_init() {     register_plugin("SQL Map Rank","0.1","Slurpy [COF]")     register_menucmd(register_menuid("What do you think about "),(1<<0)|(1<<1)|(1<<2),"vote_count")     set_task(10.0,"read_rate",777,"",0,"b")     set_task(Float:10.0,"sql_init") }
Just a small thing, the "Float:" before the 10.0 is not needed, it is automatically assumed a float in this case as it has the decimal.

Code:
public sql_init() {     new host[64], username[32], password[32], dbname[32], error[32]     get_cvar_string("amx_sql_host",host,64)     get_cvar_string("amx_sql_user",username,32)     get_cvar_string("amx_sql_pass",password,32)     get_cvar_string("amx_sql_db",dbname,32)     dbc = dbi_connect("host","username","password","dbname",error,32)     if (dbc == SQL_FAILED)     log_amx("[AMXX] SQL Connection Failed")     else     {         dbi_query(dbc,"CREATE TABLE IF NOT EXISTS `maprank` ( `map_name` VARCHAR(32) NOT NULL,`good` INT NOT NULL, `okay` INT NOT NULL, `bad` INT NOT NULL, 'total' INT NOT NULL, PRIMARY KEY(`map_name`))")     } }

You grab all of the DB information from the cvars here but connect with your own hard-coded string values. Remove the quotation marks around the first four parameters in dbi_connect to use the variables you just got instead.

Nice work.


All times are GMT -4. The time now is 19:25.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.