Page 1 of 2

Pageidavimas[Vip menu]

Posted: 2011 Aug 13 11:26
by InvIs
Norėčiau panašaus plugino į šitą, bet šis pluginas visiškai nepasileidžia, nors ir kompiliuoja be errorų.. Na, gal čia mano klaida.

Ko tiksliai noriu?

Noriu tam tikro vipmenu(labiau .sma failo, nes pats noriu pažiūrėt kaip viskas daroma, kadangi mokinuos scriptint), kuris būtų prieinamas, žinoma, tik vip'ams su /vm komanda.

Atsidarius būtų panašus vaizdas:

V.I.P Menu

1. M4A1 [OFF]
2. Deagle [OFF]
3. Šarvai [OFF]
4. Granatos [OFF]

0. Išeiti

Paspaudus betkuriuos variantus(Meniu neišsijungia), įsijungtu kiekviena opcija.

Pvz:

V.I.P Menu

1. M4A1 [ON]
2. Deagle [ON]
3. Šarvai [OFF]
4. Granatos [OFF]

0. Išeiti.

Man esmė ne pats vip pluginas, o tiesiog kaip šitie [ON/OFF] padaromi. Jeigu nesunku, padarykit kas mažą pavyzdėlį, būsiu dėkingas.

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 13 15:29
by aaarnas
Darai kintamuosius, pvz:

Code: Select all

new toggle_m4a1, toggle_deagle, toggle_armor
ir taip toliau.

Tada formatuodamas meniu, darai taip:

Code: Select all

new holder[100]formatex(holder, charsmax(holder), "M4A1 [%s]", toggle_m4a1?"ON":"OFF")menu_additem(menu, holder)
Čia jei kintamasis tiesa, tai atvaizduos ON, priešingai OFF. Gali dar pridėti spalvų su \r, \y, \d, \w.
Pvz: \r[\y%s\r] bus [ON]

Tada funkcijoje, kur paspaudus meniu item'ą, rašai taip:

Code: Select all

switch(item) {case 0: {   if(toggle_m4a1) toggle_m4a1 = false   else toggle_m4a1 = true}}
Ir po switch įdėk meniu atidarimo funkciją, kad paspaudus punktą, meniu vėl pasirodytų, o jei item == MENU_EXIT, tai tada pavadinimo neiškvieti. (Dar galima switch sąlygoje pridėti punktą default apačioje. Tai jei item neatitiks nė vieno iš case (atvejų) tai meniu užsidarys.
Tik jei naudosi naują sistemą, nepamiršk menu_destroy(menu).

Tai va, taip ir padaroma. Jei nori, kad kiekvienam žmogui būtų atskirai tai kintamuosius kurk taip:

Code: Select all

new toggle_m4a1[33]if(toggle_m4a1[id])...

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 13 17:17
by InvIs
MM, dėkui.
O kaip padaryti: tarkim M4A1 palieku [ON] Mirštu, bet kitą roundą Emkės neduoda. Kaip tai padaryti?

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 13 18:51
by aaarnas
Kad OFF būtų? Mirties forwarde nustatyk toggle_m4a1[victim] = false.

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 13 19:37
by InvIs
Ech, netaip paaiškinau. Na tarkim padarau emkę ON. Emkę išmetu, prasideda naujas round( arba mirštu, nesvarbu), bet nors ir rašo m4a1 ON, emkės naujame rounde neduoda. Reikia išjungti, įjungti, kad vėl duotų emkę. Kaip tai ištaisyti. Turbūt aiškiau.

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 13 19:50
by aaarnas
Ta prasme tau naujam raunde neduoda emkės, nors įjungta? Parodyk kodą.

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 13 20:18
by aurimasko
aarnai, norėčiau paklausti ar negalima būtų daryti kažko panašaus į šitai kai paspaudi mygtuką:

Code: Select all

 case 1:{g_toggle_m4a1[id] ? g_toggle_m4a1[id] = false : g_toggle_m4a1[id] = true} 

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 14 14:59
by InvIs
Štai kodas:

Code: Select all

#include <amxmodx>#include <amxmisc>#include <engine>#include <hamsandwich>#include <fun>#include <cstrike> #define MaxPlayers 32 new const Float: g_flCoords[][] = {    {0.50, 0.40},    {0.56, 0.44},    {0.60, 0.50},    {0.56, 0.56},    {0.50, 0.60},    {0.44, 0.56},    {0.40, 0.50},    {0.44, 0.44}} new bool: DoJump[33] = false new bool: Status[33][6] new bool: Bullet_Damagenew bool: Multi_Jumpnew bool: Vampire new PlayerPos[MaxPlayers + 1] new JumpNUM[33] = 0 new g_MaxPlayers public plugin_init(){    register_plugin("[CP] Server Menu", "1.0", "xS The Moon")     register_cvar("cpsm_advert", "1")    register_cvar("cpsm_advert_time", "20.0")     register_cvar("cpsm_health_kill", "10")    register_cvar("cpsm_health_hs", "15")    register_cvar("cpsm_maxjumps", "1")     register_clcmd("say /cp", "Main_Server_Menu")     if (get_cvar_num("cpsm_advert"))    {        set_task(get_cvar_float("cpsm_advert_time"), "CPSM_Adv_Message", 0, _, _, "b")    }     register_event("DeathMsg", "Ev_DeathMsg", "a")    register_event("Damage", "Ev_Damage", "b", "2>0", "3=0")     RegisterHam(Ham_Killed, "player", "Ham_KilledSpawn", 1)     g_MaxPlayers = get_maxplayers()} public client_connect(id){    DoJump[id] = false    JumpNUM[id] = 0} public Ev_DeathMsg(){    new attacker = read_data(1)     new Health    new HP_Add     if (Vampire)    {        if ((read_data(3) == 1) && (read_data(5) == 0))        {            HP_Add = get_cvar_num("cpsm_health_hs")        }        else        {            HP_Add = get_cvar_num("cpsm_health_kill")        }         Health = get_user_health(attacker)        Health += HP_Add         set_user_health(attacker, Health)            set_hudmessage(0, 255, 0, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1)        show_hudmessage(attacker, "Healed +%d HP", HP_Add)         message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, attacker)        write_short(1<<10)        write_short(1<<10)        write_short(0x0000)        write_byte(0)        write_byte(0)        write_byte(200)        write_byte(75)        message_end()    }} public Ev_Damage(victim){    if (read_data(4) || read_data(5) || read_data(6))    {        new id = get_user_attacker(victim)        if ((1 <= id <= g_MaxPlayers) && is_user_connected(id))        {            if (Bullet_Damage)            {                new iPos = ++PlayerPos[id]                if (iPos == sizeof(g_flCoords))                {                    iPos = PlayerPos[id] = 0                }                set_hudmessage(0, 100, 200, Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1)                show_hudmessage(id, "%d", read_data(2))            }        }    }} public CPSM_Adv_Message(id){           print_color(id, "/y[/gCP/y] /ctrServerio Meniu/y: /gNoredamas atidaryti rasyk /y//ctrcp")} public Main_Server_Menu(id){    if (get_user_flags(id) & ADMIN_LEVEL_H)    {            new menu = menu_create("\d[\rCP\d] \yServerio Meniu\d:", "Server_Menu")         new szMsg1[60]        new szMsg2[60]        new szMsg3[60]        new szMsg4[60]        new szMsg5[60]        new szMsg6[60]         format(szMsg1, 59, "\d[\rCP\d] \w3rd Person View. \yStatusas\d: \r%s.", Status[id][0] ? "\w[\yON\w]" : "\w[\rOFF\w]")        format(szMsg2, 59, "\d[\rCP\d] \wBullet Damage. \yStatusas\d: \r%s.", Status[id][1] ? "\w[\yON\w]" : "\w[\rOFF\w]")        format(szMsg3, 59, "\d[\rCP\d] \wMulti Jump. \yStatusas\d: \r%s.", Status[id][2] ? "\w[\yON\w]" : "\w[\rOFF\w]")        format(szMsg4, 59, "\d[\rCP\d] \wM4A1 + Deagle. \yStatusas\d: \r%s.", Status[id][3] ? "\w[\yON\w]" : "\w[\rOFF\w]")        format(szMsg5, 59, "\d[\rCP\d] \wAk47 + Deagle. \yStatusas\d: \r%s.", Status[id][4] ? "\w[\yON\w]" : "\w[\rOFF\w]")        format(szMsg6, 59, "\d[\rCP\d] \wHP Uz Kill. \yStatusas\d: \r%s.", Status[id][5] ? "\w[\yON\w]" : "\w[\rOFF\w]")         menu_additem(menu, szMsg1, "1", 0)        menu_additem(menu, szMsg2, "2", 0)        menu_additem(menu, szMsg3, "3", 0)        menu_additem(menu, szMsg4, "4", 0)        menu_additem(menu, szMsg5, "5", 0)        menu_additem(menu, szMsg6, "6", 0)             menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)        menu_display(id, menu, 0)    }    else    {        print_color(id, "/y[/gCP/y] /ctrControl Panel /gtik V.I.P'ams ir ADMIN'ams.")        return    }}public Server_Menu(id, menu, item){    if (item == MENU_EXIT)        {        menu_destroy(menu)        return PLUGIN_HANDLED        }         if (item == 0)    {        if (Status[id][0])        {            Status[id][0] = false            set_view(id, CAMERA_NONE)        }        else        {            Status[id][0] = true            set_view(id, CAMERA_3RDPERSON)          }    }        if (item == 1)    {        if (Status[id][1])        {            Status[id][1] = false            Bullet_Damage = false        }        else        {            Status[id][1] = true            Bullet_Damage = true            }    }        if (item == 2)    {        if (Status[id][2])        {            Status[id][2] = false            Multi_Jump = false        }        else        {            Status[id][2] = true            Multi_Jump = true        }    }        if (item == 3)    {        if (Status[id][3])        {            Status[id][3] = false        }        else if (Status[id][4] == true)        {            Status[id][3] = false        }        else        {            Status[id][3] = true            give_item(id, "weapon_m4a1")            cs_set_user_bpammo(id, CSW_M4A1, 200)            give_item(id, "weapon_deagle")            cs_set_user_bpammo(id, CSW_DEAGLE, 200)        }    }        if (item == 4)    {        if (Status[id][4])        {            Status[id][4] = false        }        else if (Status[id][3] == true)        {            Status[id][4] = false        }        else        {            Status[id][4] = true            give_item(id, "weapon_ak47")            cs_set_user_bpammo(id, CSW_AK47, 200)            give_item(id, "weapon_deagle")            cs_set_user_bpammo(id, CSW_DEAGLE, 200)        }    }        if (item == 5)    {        if (Status[id][5])        {            Status[id][5] = false            Vampire = false        }        else        {            Status[id][5] = true            Vampire = true        }    }        Main_Server_Menu(id)        return PLUGIN_HANDLED} public client_PreThink(id){    if (!is_user_alive(id))         return PLUGIN_CONTINUE     new nbut = get_user_button(id)    new obut = get_user_oldbutton(id)     if (Multi_Jump)    {        if ((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))        {            if (JumpNUM[id] < get_cvar_num("cpsm_maxjumps"))            {                DoJump[id] = true                JumpNUM[id]++                return PLUGIN_CONTINUE            }        }            if ((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))        {            JumpNUM[id] = 0            return PLUGIN_CONTINUE        }    }    return PLUGIN_CONTINUE} public client_PostThink(id){    if (!is_user_alive(id))         return PLUGIN_CONTINUE     if (DoJump[id] == true)    {        new Float: velocity[3]          entity_get_vector(id, EV_VEC_velocity, velocity)        velocity[2] = random_float(265.0, 285.0)        entity_set_vector(id, EV_VEC_velocity, velocity)        DoJump[id] = false         return PLUGIN_CONTINUE    }    return PLUGIN_CONTINUE} stock print_color(const id, const input[], any:...){    new count = 1, players[32]    static msg[191]    vformat(msg,190,input,3)    replace_all(msg,190,"/g","^4");// green txt    replace_all(msg,190,"/y","^1");// orange txt    replace_all(msg,190,"/ctr","^3");// team txt    replace_all(msg,190,"/w","^2");// team txt    if (id) players[0] = id; else get_players(players,count,"ch")    for (new i=0;i<count;i++)        if (is_user_connected(players[i]))        {            message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])            write_byte(players[i])            write_string(msg)            message_end()        }}

Atsiprašau, kad redaguoju kito žmogaus kodą, nežinau ar tai leistina, bet čia tik vardan mokymosi scriptint.
Na problema, kaip ir sakiau, jei mirštu, ar išmetu ginklus, ant naujo roundo neduoda, nors ir nustatyta [ON].
Taip pat, būtų neprošal sužinoti kur dėti strip_user_weapons, kad ant naujo round nebūtų susidvigubinę ginklai.

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 14 17:03
by aurimasko
prieš ginklų davimą reikia stripinti ginklus. Na pvz:

Code: Select all

 strip_user_weapons(id)//Duoda ginklus 
bet šiuo atveju atema viską ir knife, defuse, grenades.. tad jeigu tai bus vipmenu reikia dar pridėti, jog neatiminėtų c4 ir panašiai.

O neduoda ginklų todėl, kad nepadaryta jog duotų ar bent jau nematau.

reikia registruoti spawn forwardą:

Code: Select all

RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
šį reikia dėti į plugin_init().


tada kurti spawn funkciją:

Code: Select all

 public player_spawn(id){if(!is_user_alive(id)) //tam kad nemestų errorreturn HAM_IGNORED  //Čia duodi ginklusreturn HAM_IGNORED} 
tik duodamas ginklus nepamiršk patikrinti ar įjungtas tam tikras punktas.
taip pat reikia kad registruotas būtų include, tai yra #include <hamsandwich>

Re: Pageidavimas[Vip menu]

Posted: 2011 Aug 14 17:11
by aaarnas
aurimasko wrote:aarnai, norėčiau paklausti ar negalima būtų daryti kažko panašaus į šitai kai paspaudi mygtuką:

Code: Select all

 case 1:{g_toggle_m4a1[id] ? g_toggle_m4a1[id] = false : g_toggle_m4a1[id] = true} 
Pamėgink kompiliuot. Šiaip ne, neturėtų leisti, nes ? sąlyga tiesiog grąžina reikšmę. Galima daryti taip jei nori tokiu būdu:

Code: Select all

g_toggle_m4a1[id] = g_toggle_m4a1[id]?false:true