remix.cc Posted June 11, 2009 Report Share Posted June 11, 2009 (edited) Counter-strike web monitor Tātad izveidoju counter-strike monitoru, kurš ar pluginu (amxx) palīdzību pārsūta vajadzīgos datus uz noteiktu datubāzi. Instalācija: 1. cs_monitor2009.amxx ievietojam plugins mapē 2. configs mapē: * plugins.ini ierakstam plugina nosaukumu * modules.ini atķeksējam mysql datubāzi * amxx.cfg ierakstam datus (nav obligāts pasākums, ja vajadzīgie dati tiek ierakstīti plugina *.sma failā! ) monitor_host localhost monitor_uname ?login monitor_upw password monitor_dbname monitor 3. Šeit ir 2 varianti... mēs varam palaist serveri un cerēt, ka plugins pats izveidos datubāzi?vai, ja nav slinkums, phpmyadmin veidojam jaunu datubāzi ar nosaukumu, kuru jūs ievadījāt cvarā "monitor_dbname" (def: monitor) .? Ja jūs nolēmāt uzreiz palaist serveri un servera konsolē jums tiek pateikts, ka plugins nevar atrast datubāzi/datubāze nav izvēlēta, tad jums nāksies izveidot datubāzi manuāli caur phpmyadmin. Vajadzīgas tabulas plugins izveido pats. Web mapītē ir arī paraugs, ko plugins var izvilkt no datubāzēm, kas var būt parādīts mājas lapā. Vēl ir viens papildus cvars: monitor_update 15.0 Defaultā tas ir uzlikts uz 15 sekundēm, cvarā norādītais laiks ir laiks ar kādu intensitāti plugins atjaunos datus. Tabulas: players ?*) pl_name // Spēlētāja niks? ?*) pl_frags // Spēlētāja fragu skaits ?*) pl_death // Spēlētāja nāvju skaits ?*) pl_team // Spēlētāja komandas nosaukuma pirmais burts (U, C, T, S) ?*) pl_ip // Spēlētāja IP addrese + protokols laikam arī iet līdz ?*) pl_admin // ?Ja spēlētājs ir admins, vērtība ir 1, ja parasts spēlētājs 0 other ?*) curmap // Karte, kura ir pašlaik ?*) nextmap // Nākamā karte ?*) timelimit // mp_timelimit ?*) timeleft // amx_timeleft ?*) scoret // Teroristu uzvaru skaits ?*) scorect // Ct uzvaru skaits ?*) curpl // Pašreizējais spēlētāju sk. ?*) maxpl // Maksimālais spēlētāju sk. Ja par pluginu rodas jautājumi, ja plugins strādā nekorekti (diemžēl nav iespējas pilnībā? iztestēt, nevaru atvērt portu/vai kas tur? ), ir kādi ieteikumi, tad postojiet zemāk... cs_monitor.zip Edited June 12, 2009 by remix.cc Link to comment Share on other sites More sharing options...
shine Posted June 11, 2009 Report Share Posted June 11, 2009 (edited) 1. Salasāmi ar atstarpēm un pārējiem šitiem. Nedari šādi: public funckija() { dsadas fsadadsa } public funkcija() { } Dari šādi(ievēro vienu atstarpi): public funckija() { dsadas fsadadsa } public funkcija() { } 2. Skaidrākus funkcijas nosaukumus(tādi, kas pastāsta, par ko ir runa). Ko nozīmē public MK()? Kas ir MK? Mortal Kombat? 3. Pcvarus ieteiktu apvienot vienā arrajā un izveido g_Query, lai nav jāveido katru reizi jauns: enum SQL_INFO { HOST, USER, PASSWORD, DATABASE, UPDATE } new g_Query[256] new c_MySqlInfo[SQL_INFO] public plugin_init() { c_MySqlInfo[SQL_INFO:HOST] = register_cvar("monitor_host","localhost") c_MySqlInfo[SQL_INFO:USER] = register_cvar("monitor_uname","root") c_MySqlInfo[SQL_INFO:PASSWORD] = register_cvar("monitor_upw","123") c_MySqlInfo[SQL_INFO:DATABASE] = register_cvar("monitor_dbname","monitor") c_MySqlInfo[SQL_INFO:UPDATE] = register_cvar("monitor_update","15.0") } //un pie connect public DatabaseConnect() { new MySqlInfo[SQL_INFO][64] get_pcvar_string(c_MySqlInfo[SQL_INFO:HOST],MySqlInfo[SQL_INFO:HOST],63) get_pcvar_string(c_MySqlInfo[SQL_INFO:USER],MySqlInfo[SQL_INFO:USER],63) get_pcvar_string(c_MySqlInfo[SQL_INFO:PASSWORD],MySqlInfo[SQL_INFO:PASSWORD],63) get_pcvar_string(c_MySqlInfo[SQL_INFO:HOST],MySqlInfo[SQL_INFO:DATABASE],63) formatex(g_Query,255,"CREATE DATABASE IF NOT EXISTS %s",MySqlInfo[SQL_INFO:DATABASE]) SendQuery(g_Query) } 4. Kāpēc tu taisi lieku boolu - db_created, nebūtu vieglāk tam "startloop()" uzlikt tasku uz 1.0? Tāpat, ja neizdosies izveidot datubāzi tu izmanto set_fail_state, kas apstādina pluginu. 5. new Float:timef = get_pcvar_float(pcvar5) Totāls fails, liec pa taisno iekšā: set_task(get_pcvar_float(pcvar5),"update_all",_,_,_,"b") 6. Vispār liec šo plugin_init: set_task(get_pcvar_float(pcvar5), "update_all", _ , _ , _ , "b") un to papildus funkciju nodzēs. 7. public rr() update_details(0,0) *Atstarpes no citām funkcijām. * public rr() update_details(0,0) OR public rr() { update_details(0,0) } 8. is_admin[id] = false if(is_user_bot(id) || is_user_hltv(id)) return PLUGIN_HANDLED if(get_user_flags(id) & ADMIN_BAN) is_admin[id] = true Lieto else pie flag check: if(is_user_bot(id) || is_user_hltv(id)) return PLUGIN_HANDLED if(get_user_flags(id) & ADMIN_BAN) { is_admin[id] = true } else { is_admin[id] = false } Citādi, ja ir admins, tad 2 reizes tiek mainīta bool vērtība. 9. new score_teamct = 0, score_teamt = 0 Nav jēga likt = 0, šis nav C++, bet ir pawn. 10. new maxplayers = 33 Pff, vai nu: #define MAXPLAYERS 33 or raksti to pirms aiz funkcijas(global - karoče virs plugin_init tavā gadījumā). Tu saproti, ka tu veido jaunu mainīgo un piešķir tam vērtību, ik pa 15 sec? 11. for(new i=0; i<maxplayers; i++) { if(is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i)) { udp2(i) } } Beidzot, kaut kas acīm kaut cik tīkams. (applause). 12. Veido domājošu entity taska vietā: #include <amxmodx> #include <fakemeta> #include <hamsandwich> new pcvar5 new g_HandlerEnt public plugin_init() { //Tavs kods pcvar5 = register_cvar("monitor_update", "15.0") RegisterHam(Ham_Think,"info_target","HandlerThink",1) MakeHandler() } public MakeHandler() { g_HandlerEnt = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target")) //Classname nav obligāts. Dzēs šo rindiņu ārā. Es šo uzrakstīju tāpat... set_pev(g_HandlerEnt,pev_classname,"shine_largerthan_3rmx") set_pev(g_HandlerEnt,pev_nextthink,get_gametime() + get_pcvar_float(pcvar5)) } public HandlerThink(Ent) { if(Ent == g_HandlerEnt) { //UPDATE } } Neuztraucies, ka tiek inklūdoti 2 moduļi, tomēr labāks par tasku . 13. Kāds ADMIN_CVAR? Neliec to > pcvar5 = register_cvar("monitor_update", "15.0", ADMIN_CVAR) > pcvar5 = register_cvar("monitor_update", "15.0") 14. is_admin[id] = false if(get_user_flags(id) & ADMIN_BAN) is_admin[id] = true Atkal... izmanto else. 15. new ErC, Handle:sqlc = SQL_Connect(tuple, ErC, gerror, 511) Error un Handle:sqlc izveido kā globalos mainīgos, lai katru reizi nav jātaisa jauni. 16. get_cvar_string("amx_nextmap", nextmap, 32) get_cvar_string("mp_timelimit", timelimit, 9) get_cvar_string("amx_timeleft", timeleft, 9) Izmanto cvar pointerus un iegūsti šos stringus kā pcvarus, jo viņš katru reizi burās cauri visiem cvariem kamēr atrod šos, un šie ir beigās tāpēc šis ēd resus . Šādi: new cp_nextmap public plugin_init() { cp_nextmap = get_cvar_pointer("amx_nextmap") } public iownrmx() { new Nextmap[33] get_pcvar_string(cp_nextmap,Nextmap,32) } 17. maxpl = get_maxplayers() Lieto globalo mainīgo. 18. if(!first_update) { new Handle:query = SQL_PrepareQuery(sqlc, "INSERT INTO other (curmap , nextmap , timelimit , timeleft, curpl, maxpl, scoret, scorect) VALUES ('%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d') ", curmap, nextmap, timelimit, timeleft, curpl, maxpl, teamt, teamct) mk(query) first_update =true } else { new Handle:query = SQL_PrepareQuery(sqlc, "UPDATE other SET curmap = '%s', nextmap = '%s', timelimit = '%s', timeleft = '%s', curpl = '%d', maxpl = '%d', scoret = '%d', scorect = '%d' ",curmap, nextmap, timelimit, timeleft, curpl, maxpl, teamt, teamct) mk(query) } Neveido jaunu Handle:query katru reizi, izveido vai nu global vai arī static, vai arī pirms if/else vienu. 19. public update_details(teamct, teamt) Kāpēc tu to vietā nevarētu izmantot globalos mainīgos, kas tev jau Ir? 20. replace_all(pl_name, 55, "'", "'") > replace_all(pl_name, 55, "'", "\'") MySQL viņš ieliks bez \. 21. switch(num) { case 0: { new Handle:query = SQL_PrepareQuery(SqlC, "INSERT INTO players (pl_name, pl_ip, pl_frags, pl_death, pl_team, pl_admin) VALUES ('%s', '%s', '%d', '%d', '%s', '%s')", pl_name, pl_ip, frags, death, team, is_admin[id] == true ? "1" : "0") mk(query) } case 1: { new Handle:query = SQL_PrepareQuery(SqlC, "UPDATE players SET pl_name = '%s', pl_frags = '%d', pl_death = '%d', pl_team = '%s', pl_admin = '%s' WHERE pl_ip = '%s' ", pl_name, frags, death, team, is_admin[id] == true ? "1" : "0", pl_ip) mk(query) } case 2: { new Handle:query = SQL_PrepareQuery(SqlC, "DELETE FROM players WHERE pl_ip = '%s'", pl_ip) mk(query) } } Netaisi katru reizi jaunu, izmanto to pašu mainīgo, ko jau iepriekš ieteicu. mk(query) iznes ārā no switch. 22. create_table(sqlc, 1, "") create_table(sqlc, 2, "") create_table(sqlc, 3, "") create_table(sqlc, 4, "") ČO ZA FĀK? > Ņem piemēru no šī(iekļauti mainīgie un cits šits no punkta 3. Skatīt augstāk): public DatabaseConnect() { new MySqlInfo[SQL_INFO][64], Query[5][192] get_pcvar_string(c_MySqlInfo[SQL_INFO:HOST],MySqlInfo[SQL_INFO:HOST],63) get_pcvar_string(c_MySqlInfo[SQL_INFO:USER],MySqlInfo[SQL_INFO:USER],63) get_pcvar_string(c_MySqlInfo[SQL_INFO:PASSWORD],MySqlInfo[SQL_INFO:PASSWORD],63) get_pcvar_string(c_MySqlInfo[SQL_INFO:HOST],MySqlInfo[SQL_INFO:DATABASE],63) g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,Db) SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511) if(SqlConnection == Empty_Handle) { log_amx(g_Error) return PLUGIN_CONTINUE } formatex(Query[0],255,"CREATE DATABASE IF NOT EXISTS %s",MySqlInfo[SQL_INFO:DATABASE]); SendQuery(g_Query) formatex(Query[1],255,"CREATE TABLE IF NOT EXISTS Players (PlayerName VARCHAR(64), PlayerFrags INT, PlayerDeaths INT, PlayerTeam VARCHAR(3))") formatex(Query[2],255,"CREATE TABLE IF NOT EXISTS Other (Map VARCHAR(33), NextMap VARCHAR(33), TimeLimit VARCHAR(6), TimeLeft VARCHAR(6), TScore INT, CTScore INT, PlayerCount, MaxPlayers)") formatex(Query[3],255,"DELETE * FROM Players") formatex(Query[4],255,"DELETE * FROM Other") SendMultipleQueries(Query,5) } public SendMultipleQueries(Queries[][],Count) { new i for(i = 0; i < Count; i++) { SendQuery(Queries[i]) } } public SendQuery(Query1[]) { SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511) if(g_SqlTuple != Empty_Handle) { static Handle:Query Query = SQL_PrepareQuery(SqlConnection,Query1) if(!SQL_Execute(Query)) { SQL_QueryError(Query,g_Error,511) log_amx(g_Error) } SQL_FreeHandle(Query) SQL_FreeHandle(SqlConnection) } else { log_amx(g_Error) } } UN punkts nummur divdesmit trīs: public plugin_end() SQL_FreeHandle(tuple) Tā vajag? Kur tu rāvi, ka tā vajag darīt? Kāpēc tu to dari? Pastāsti, kur tu izlasīji, ka tā vajag darīt?! Godīgi sakot, nedomāju, ka tā vajag, bet parādi, kur tu izlasīji, ka vajag, lūdzu. P.S. Monitors ir OK. (thumbsup). Edited June 11, 2009 by shine Link to comment Share on other sites More sharing options...
remix.cc Posted June 12, 2009 Author Report Share Posted June 12, 2009 affirminative sensej lab.. drusku palaboju kodu... kas likas sapratigs no ta visa, ko te ierakstiji, to ari centos uzlabot... Link to comment Share on other sites More sharing options...
4ava Posted June 12, 2009 Report Share Posted June 12, 2009 (edited) .... edīte viss ok + būtu tomēr labāk ja arī db tu šeit ieliktu Edited June 12, 2009 by 4ava Link to comment Share on other sites More sharing options...
shine Posted June 12, 2009 Report Share Posted June 12, 2009 (edited) Es nerakstīšu neko gari, bet: maxpl = get_maxplayers() Vai tad maxplayers var mainīties spēles laikā? Nē.. uztaisi global maxpl = get_maxplayers() vienu reizi kodā. un public update_details(score_teamct, score_teamt) > public update_details() and Smuki.. ir atstarpes starp funkcijām, vēl kodā ieliec atstarpes starp visiem IF un pēc mainīgo izveidošanas. Tā jau kods salasāmāks. Congratz. Izmēģini likt { } arī, ja pēc nosacījuma( if(blablabla = 2312) ) ir tikai viena darbība. Izskatās daudz smukāk un tiešām vieglāk salasīt. +Ja gribi, lai plugins izskatās garāks.. > public client_disconnect(id) { if(!using_sql) update_player(id, 2) else set_task(2.0, "client_disconnect", id) } > public client_disconnect(id) { if(!using_sql) { update_player(id, 2) } else { set_task(2.0, "client_disconnect", id) } } Pie pārējiem sīkumiem nepiesiešos.. karoče neskatīšos vairāk kodu tik sīki. Vismaz viens skripteris māk kaut ko uztaisīt Latvijā . Edited June 12, 2009 by shine Link to comment Share on other sites More sharing options...
remix.cc Posted June 12, 2009 Author Report Share Posted June 12, 2009 . Nu ja tas ir labi, ka tu dzivo Krievija + būtu tomēr labāk ja arī db tu šeit ieliktu nesapratu... kadu db? tip install.php ? btw. shine... veidojam weblapu, tip Latvian amxx :D tas ir labak neka tos pluginus katru nedelju... Link to comment Share on other sites More sharing options...
4ava Posted June 12, 2009 Report Share Posted June 12, 2009 tas ir labi, ka tu dzivo Krievija nesapratu... kadu db? tip install.php ? btw. shine... veidojam weblapu, tip Latvian amxx :D tas ir labak neka tos pluginus katru nedelju... tabulas other un players saturu ko kopēt iekš phpmyadmin Link to comment Share on other sites More sharing options...
shine Posted June 12, 2009 Report Share Posted June 12, 2009 (edited) Ok, tu maksā par hostu un domēnu . Un nekādu ucoz vai oo.lv! Da tas būs fails, neviens tāpat nemāk un nevēlas iemācīties kodē AMXX-Pawn valodā.. Latvijā. Tu nevienu pluginu ar mani nevari uztaisīt, un kur tu nu vēl pats publicēt, tāpēc tevi nepazīst allied modders. Skatos gign esi populārs skripteris . Davai uzmeiko kādu ūber krutu pluginu un publicē allied modders. Iemetīšu kādu labu vārdu! Vai arī uztaisam kaut ko kopā... tev pat grūti ieslēgt TViewer un ielaist paskatīties ... Edited June 12, 2009 by shine Link to comment Share on other sites More sharing options...
Lancom Posted June 13, 2009 Report Share Posted June 13, 2009 (edited) MySQL CODE -> http://yy.lv/download.php?f=51335 или ===================================== CREATE TABLE `other` ( `curmap` varchar(255) NOT NULL, `nextmap` varchar(255) NOT NULL, `timelimit` varchar(255) NOT NULL, `timeleft` varchar(255) NOT NULL, `scoret` varchar(255) NOT NULL, `scorect` varchar(255) NOT NULL, `curpl` varchar(255) NOT NULL, `maxpl` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE `players` ( `pl_name` varchar(255) NOT NULL, `pl_frags` varchar(255) NOT NULL, `pl_death` varchar(255) NOT NULL, `pl_team` varchar(255) NOT NULL, `pl_ip` varchar(255) NOT NULL, `pl_admin` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ===================================== Можно так `pl_admin` varchar(255) NOT NULL и так `pl_admin` INT(255) NOT NULL Edited June 13, 2009 by Lancom Link to comment Share on other sites More sharing options...
remix.cc Posted June 13, 2009 Author Report Share Posted June 13, 2009 ko kopēt iekš phpmyadmin Ja es pateikshu, ka tabulas un saturu plugins (amxx) uztaisa pats, tad tev vajadziba pec koda pazudis? Ja ne, tad varu ielikt, bet itka Lancom'a?kods ir diezgan normals... cik atceros pl_admin bija nevis varchar, bet int, bet es nezinu, vai tas ko maina Tu nevienu pluginu ar mani nevari uztaisīt, un kur tu nu vēl pats publicēt, tāpēc tevi nepazīst allied modders. Es nepubliceju nevienu pluginu amxx'a, jo man nav vajadzibas to darit... turklat, ja es iepostošu, tad uzreiz birsies tie tur ieteikumi/uzlabojumi... ja tu vari sedet pie skiptoshanas 24/7, tad es ne... man tas sak apnikt Link to comment Share on other sites More sharing options...
Lancom Posted June 13, 2009 Report Share Posted June 13, 2009 В cs_monitor2009.sma надо изменить #define maxplayers 33 на #define maxplayers 32 !!! Link to comment Share on other sites More sharing options...
remix.cc Posted June 13, 2009 Author Report Share Posted June 13, 2009 (edited) Menaj esli xochesh, tolko, za nekorektnuju rabotu monitora otvechaj sam... drugim menjatj nesovetuju... Edited June 13, 2009 by remix.cc Link to comment Share on other sites More sharing options...
shine Posted June 13, 2009 Report Share Posted June 13, 2009 for(new i = 0; i < 33; i++) i = 0 līdz i = 32, jo vienmēr ir mazāks par 33. Tas pats ar stringiem sākas no 0 un iet līdz n - 1. rmx, netaisi neko ūberīgu, pirmstam ar mani parunā un es tev norādīšu kļūdas. Viņi man vairs nepiesienas . Vismaz vienu pluginu publicē, tici man būsi kruts, ka vismaz 1 tavs darbs būs amxmodx.org. Or uztaisam kaut ko kopā, vienam nav jautri :/. Link to comment Share on other sites More sharing options...
Niclas Posted June 26, 2009 Report Share Posted June 26, 2009 (edited) Pamācat man ar kodēt - es ar gribu iemācīties Edited June 26, 2009 by Niclas Link to comment Share on other sites More sharing options...
Grow3r Posted July 20, 2009 Report Share Posted July 20, 2009 (edited) Man rāda šādi: Mapname: cs_assault Nextmap: de_cbble Players: 16/22 Timelimit: 30 Timeleft: 25 Score: Ct 0 Ts 3 Players Frags Deaths CTs CTs CTs CTs CTs CTs CTs CTs CTs CTs CTs CTs CTs CTs CTs Ts gyvulelis 1 3 Ts faiL 3 2 Ts XeqtR` RokkY 1 1 Ts Ts Ts cool som fan 1 2 Ts Killa_No1 2 2 Ts Ts Ts Ts Ts robban lover! 6 1 Ts Ts Kiler$$ 0 1 Ts - [DecauX;]# sUpEr_mArIo 0 0 Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Spectators Edited July 20, 2009 by Grow3r Link to comment Share on other sites More sharing options...
remix.cc Posted July 30, 2009 Author Report Share Posted July 30, 2009 diez vai ta ir amxx vaina... drizak php koda... php kodu es ieliku, lai cilveki redz, kadu informaciju plugins var izvilkt... diemzel no php es sajedzu samera maz, tapec sorry... Link to comment Share on other sites More sharing options...
nfren Posted July 30, 2009 Report Share Posted July 30, 2009 (edited) Man uz linux viņš nez kapēc nestrādā.. web neko neuzrāda. Edited July 30, 2009 by nfren Link to comment Share on other sites More sharing options...
remix.cc Posted August 1, 2009 Author Report Share Posted August 1, 2009 vins vispar ieraksta mysql datubaze datus? pareizi sarakstiji paroles utt? Link to comment Share on other sites More sharing options...
Gest3r Posted August 1, 2009 Report Share Posted August 1, 2009 Paldies ... diezgan laba pamācība. !!! Link to comment Share on other sites More sharing options...
ry. Posted August 1, 2009 Report Share Posted August 1, 2009 remix.cc varētu lūdzu kādu bildīti? Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now