Page 1 of 1

Mute pluginas

Posted: 2015 Mar 13 18:06
by aurimasko
Sveiki. Kompe radau savo seną MUTE pluginą ir sugalvojau pasidalinti juo čia.

Internete yra įvairių tokio tipo pluginų, vieni galbūt geresni už maniškį, kiti prastesni, bet įkelsiu ir savo, tebūnie pakomentuokit ar gerai padarytas pluginas :D

Šis pluginas yra išskirtinis tuo, kad jame yra tik native's, ir jokių admin komandų nėra. Taigi, jūs galite prisiderinti šį pluginą prie savo admin sistemos arba užmutinti žaidėją kada tik norite.

Code: Select all

 /*    Grąžina žaidėjo statusą.        id - žaidėjo ID.            return:        0 - neužmutintas        1 - užmutintas*/native get_user_mute(id); /*     Pakeičia žaidėjo mute statusą.        id - žaidėjo ID.        mode - žaidėjo statusas (0 - atmutinti, 1 - užmutinti).        admin - administratoriaus ID (atliekant atmutinimą palikite tuščią).        mutetime - mute laikotarpis SEKUNDĖMIS (atliekant atmutinimą palikite tuščią).        reason - mute priežastis (atliekant atmutinimą palikite tuščią).            return:        0 - nepavyko atlikti veiksmo.        1 - pavyko atlikti veiksmą.*/native set_user_mute(id, mode, admin = 0, mutetime = 0, reason[] = ""); 
Užmutintas žaidėjas negali nei rašyti, nei kalbėti, tačiau gali naudoti komandas, kurios prasideda '/' ženklu, bei specialią komandą /mute, kurią parašius parodo likusį mute laiką, priežastį ir administratorių, kuris užmutino.

Visi mute įrašai kaupiami SQL duomenų bazėje, lentelė sukuriama automatiškai.

Cvarai:

Code: Select all

 amx_mute_sqlmode "0" // 0 - SQL informacija kraunama iš sql.cfg failo, 1 - iš plugine esančių cvarų.amx_sql_host ""amx_sql_user ""amx_sql_pass ""amx_sql_db "" 
Jei norite, kad SQL duomenų bazės prisijungimo duomenis išgautų iš sql.cfg failo, tuomet amx_mute_sqlmode cvar'ą nustatome į 0 ir visus kitus paliekame tuščius, o jei norite įrašyti kitus duomenis - tuomet nustatome į 1 ir įrašome į atitinkamus cvarus atitinkamą informaciją.

Paskutinis dalykas - šis pluginas naudoja AMXX 1.8.3 funkciją client_print_color. Jei naudojate žemesnę AMXX versiją, tuomet plugine užkomentuokite šią eilutę:

Code: Select all

 #define AMXMODX_VERSION_1_8_3 1 // Jei naudojate žemesnę nei AMXX 1.8.3 versiją, tuomet užkomentuokite šią eilutę. 
Bei turėsite įsikelti colorchat include ir naudoti mute_system_colorchat.txt kalbos failą.

Atrodo viskas, pluginą dariau seniai, tad gali būti klaidų, jei kažkas susidomės - rašykit čia :)

Re: Mute pluginas

Posted: 2015 Mar 13 19:32
by psychical
1. Siūlyčiau ne cvar'syu, o define daryti, paprastesnis išgavimas, nereikia hookinti cvar'ų.

2. 155eil. formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `mutetime` = '%d' WHERE `userip`='%s' AND `server_id`='%d'", TABLE_MUTES, g_iPlayerInfo[id][iMuteTime]); Man vienam atrodo, kad trūksta parametrų?

3. 178eil. formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `userip`='%s'", TABLE_MUTES, szIP); mano siūlymas būtų tikrinti steamid IR ip.

4. 298-308eil. kadangi pagal viską turėtų būti TIK vienas įrašas (LIMIT'as 178eil.), tai čia ne while o if'as turėtų stovėti ir paprastesnis klausimas į programinę pusę.


5. vis dėl to suklydau, netikrini ar žaidėjas mutintas DB, o reikėtų.

Taip pat siūlymas iš mano pusės, kad padarytum priedo "tipą" kuriame būtų galima nustatyti chat/speak/chat&speak mute. Panašiai kaip gag'as, bet by default tik speak mute. Nu gal suprasi :D

Re: Mute pluginas

Posted: 2015 Mar 13 20:06
by aurimasko
psychical wrote:1. Siūlyčiau ne cvar'syu, o define daryti, paprastesnis išgavimas, nereikia hookinti cvar'ų.

2. 155eil. formatex(szQuery, charsmax(szQuery), "UPDATE `%s` SET `mutetime` = '%d' WHERE `userip`='%s' AND `server_id`='%d'", TABLE_MUTES, g_iPlayerInfo[id][iMuteTime]); Man vienam atrodo, kad trūksta parametrų?

3. 178eil. formatex(szQuery, charsmax(szQuery), "SELECT * FROM `%s` WHERE `userip`='%s'", TABLE_MUTES, szIP); mano siūlymas būtų tikrinti steamid IR ip.

4. 298-308eil. kadangi pagal viską turėtų būti TIK vienas įrašas (LIMIT'as 178eil.), tai čia ne while o if'as turėtų stovėti ir paprastesnis klausimas į programinę pusę.


5. vis dėl to suklydau, netikrini ar žaidėjas mutintas DB, o reikėtų.

Taip pat siūlymas iš mano pusės, kad padarytum priedo "tipą" kuriame būtų galima nustatyti chat/speak/chat&speak mute. Panašiai kaip gag'as, bet by default tik speak mute. Nu gal suprasi :D
1. Na galima viską perkelti ant define, tiesiog sql.cfg failui reikia cvarus registruot kiek žinau, todėl taip ir padariau :D
2. Joo, ištaisiau šitą, nes pas mane serveryje truputį kitaip būdavo, tai prieš keldamas pakeičiau (išskyrus čia).
3. Gera mintis.
4. Na, jei padarysiu kad tikrintų ir STEAMID ir IP, tuomet greičiausiai tavo tiesa (nes jei tikrina tik IP, tuomet gali būti ir ne vienas įrašas).
5. ?? :D

Tipus ir visus pastebėjimus pridėsiu kiek vėliau.

Re: Mute pluginas

Posted: 2015 Mar 14 02:05
by psychical
5. Kai mutini žaidėją, tu tikrini ar jis yra mutintas žaidime, jei žaidime nemutintas, tuomet rašai į DB. Tačiau, jei žaidime nemutintas, o DB mutintas, tokiu atveju turėsi 2 įrašus vieno užmutinto žaidėjo su tais pačiais parametrais. Ir tai reiškia, kad jei sakykim kas nors naudos tavo sistemą ir darys SMS unmute, tuomet jam sistema tinkamai neveiks.

Re: Mute pluginas

Posted: 2015 Mar 14 12:10
by aurimasko
Bet tai kaip jis gali būti DB užmutintas, o žaidime ne? Juk prisijungiant tikrina, ar turi įrašą ar ne, o jei turi - užmutina. Vienintelis variantas yra, jei du žaidėjai su vienodu IP vienu metu žaidžia serveryje ir vieną užmutina, o po kiek laiko kitą, tuomet bus 2 įrašai, bet įdėjus SteamID tikrinimą turėtų nebelikti šios problemos.

Re: Mute pluginas

Posted: 2015 Mar 14 14:37
by psychical
Kokiu būdu? Map keitimosi metu, jei bus 32 žaidėjai 10 iš jų užmutinta (čia kaip pvz, užtenka ir mažiau), bet kokiu atveju tikrina visus ir kažkokiu sumautu būdu, mysql'as amxx'e sugeba susimauti ir ne visada užkrauti tai ką reikia.

Re: Mute pluginas

Posted: 2015 Mar 14 15:37
by aurimasko
Nu nebent.. Pamenu būdavo kituose pluginuose anksčiau tokios pievos, kad iš lempos dingsta visi duomenys.. Bet šiaip, bendrai, nebūtų variantas kažkiek laiko po connect'o, dar kartą pabandyt užkraut duomenis?