Keli amxx klausimai

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Keli amxx klausimai

Post by bussinessman »

Sveiki, čia truputi "skriptinau" ir kilo problemų, turiu kelis klausimus.

1. cs_get_user_team ar get_user_team?
Kuom jie skiriasi? Aš visur naudoju cs_get_user_team(id, CS_TEAM_CT); ir nežinau ar tai geriau ar blogiau už get_user_team...


2. set_task
Padariau "Ham_Spawn" ir ten duoda pavyzdžiui ginklą, granatų arba dar ką nors, ar būtina daryti su set_task, kad duotų, ar galima tiesiogiai give_item?

Mano kodas yra toks:

Code: Select all

public PlayerSpawn(id){if(user_has_weapon(id, CSW_C4) && cs_get_user_team(id) == CS_TEAM_T) {engclient_cmd(id,"drop", "weapon_c4");}strip_user_weapons(id); if(weapon[id] == 0) {//nieko} else if (weapon[id] == 1) {give_item(id, "weapon_deagle")} else if (weapon[id] == 2) {give_item(id, "weapon_glock18")}}
Ar geriau daryti šitaip:

Code: Select all

public PlayerSpawn(id){if(user_has_weapon(id, CSW_C4) && cs_get_user_team(id) == CS_TEAM_T) {engclient_cmd(id,"drop", "weapon_c4");}strip_user_weapons(id); weapon1_active[id] = 0;weapon2_active[id] = 0; if(weapon1_mode[id] == 1) {weapon1_active = 1;set_task(1.0, "weapon1", id);} else if(weapon2_mode[id] == 1) {weapon2_active = 1;set_task(1.0, "weapon2", id);}}

Kuris kodas labiau "optimizuotas"?
Aš tiesiog pagalvojau, kam kurti tų 10 "new weapon1_active[33]", jei galima su vienu, tiesiog jį setinti pagal numerį.

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: Keli amxx klausimai

Post by newb »

Jeigu CT mire ir iskart perejo i T komanda ir kol jis neatsirespawnines get_user_team grazins jo komanda CT, o cs_get_user_team grazins T. Bet jeigu tu zinai kad jis turi buti gyvas geriau manau get_user_team.

Ham_Spawne galima iskart duoti itemus. Bet rikriausei reikia tikrint ar gyvas useris, nors man atrodo jei darai post=1 tai jis ne bus mires.

Tada dar klausymas, kam tu dropini ta c4 ? Ir isvis ka tu nori padaryt ?

bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Re: Keli amxx klausimai

Post by bussinessman »

Nu aš čia šiaip noriu padaryti tokį /gunmenu pasibandymui ir mačiau vienam vip'e tokį būdą su active ir mode, bet galvojau gal nelabai logiška pridėti jų tiek daug.
Noriu, kad menu kai pasirenki užsetintu ir tada per spawn duotų itemą.
O c4 dropinu, nes kai strip_user_weapons būna tai dingsta jinai.

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Re: Keli amxx klausimai

Post by aaarnas »

get_user_team tuo cs_ dar skiriasi tuo, kad cs_ veiks tik su counter trike modifikacija. Be to cs_ naudoja CsTeams kintamojo id, tad atliekant kai kurias operacijas gali kilti bėdų. Čia priklauso kaip tuos duomenis naudosi.

Jei per Ham_Spawn žaidėju duodi ginklus, keiti jo gyvybes ar panašiai, visada įsitikink, kad RegisterHam funkcijoje gale parašei vieną. Kaip kažkurioje pamokoje pasakojau, tai reiškia, kad forwardas iškviečiamas kai žaidimo variklis atlieka visus veiksmus reikalingus žaidėjo spawnui. Tada nebus jokių nesklandumų.

Be to, jei spawn forwarde naudoji give tiem ar kažką panašaus, kurie gali veikti tik su gyvu žaidėju, tai viršuje visada tikrink is_user_alive, nes kai jungiasi į spectate, irgi iškviečiamas spawn forwardas.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

newb
Pluginų patvirtintojas
Posts: 1047
Joined: 2010 Sep 23 21:43
Location: Wonderland
Contact:

Re: Keli amxx klausimai

Post by newb »

Kazkada naudojau toki meniu, tiksliau cia 5 jo dalis

Code: Select all

#include <amxmodx>#include <hamsandwich>#include <fun>#include <cstrike>#include <fakemeta> #define PRIMARY_WEAPONS_BITSUM ((1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)) #define SHOPTAG "^x04[Shop]^x01" new const GunMenu[][] = {    "M4A1",    "AK47",    "M3",    "AWP",    "Galil",    "Aug",    "SG552"} new const WeaponCost[] = {    3000,   //M4A1    3000,   //AK47    4000,   //M3    6000,   //AWP    2500,   //Galil    3000,   //Aug    3000    //SG552} new const WeaponGive[][]= {    "weapon_m4a1",    "weapon_ak47",    "weapon_m3",    "weapon_awp",    "weapon_galil",    "weapon_aug",    "weapon_sg552"} new const WeaponBPAmmo[]= {    90, //M4A1    90, //AK47    32, //M3    30, //AWP    90, //Galil    90, //Aug    90  //SG552} new Weapon[33][sizeof(GunMenu)]new gmsgSayText public plugin_init() {    RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1)        register_clcmd("say shop", "Create_Menu")        gmsgSayText = get_user_msgid("SayText")} public PlayerSpawn(id) {    if(is_user_alive(id)) {        for(new i; i <= charsmax(GunMenu); i++)            if(Weapon[id][i]) CheckWeapon(id, i, WeaponCost[i])    }    return HAM_IGNORED} public Create_Menu(id) {    new Menu = menu_create("\rGuns:", "MainMenu_Handler")    new Items[32], Position[3],  PriceString[8]        for (new i; i < sizeof(GunMenu); i++) {        formatex(PriceString, charsmax(PriceString), "- %d$", WeaponCost[i])                formatex(Items, charsmax(Items), "\w%s %s", GunMenu[i], PriceString)                         num_to_str(i, Position, charsmax(Position))                        menu_additem(Menu, Items, Position)    }    menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL)    menu_display(id, Menu, 0)       } public MainMenu_Handler(id, Menu, item) {    if (item == MENU_EXIT) {        menu_destroy(Menu)        return PLUGIN_HANDLED    }        CheckWeapon(id, item, WeaponCost[item])     menu_destroy(Menu)    return PLUGIN_CONTINUE} public CheckWeapon(id, nr, Cost) {    if(!is_user_alive(id)) {        ChatColor(id, "%s Gausi %s kitame raunde", SHOPTAG, GunMenu[nr])        arrayset(Weapon[id], false, sizeof(GunMenu))        Weapon[id][nr] = true        return PLUGIN_CONTINUE    }        if(user_has_weapon(id, get_weaponid(WeaponGive[nr]))) {        ChatColor(id, "%s Tu jau turi %s", SHOPTAG, GunMenu[nr])         return PLUGIN_CONTINUE    }    static Money; Money = cs_get_user_money(id)    if(Money < Cost) {        ChatColor(id, "%s Neuztenka pinigu. Reikia: %i$", SHOPTAG, Cost)        Weapon[id][nr] = false        return PLUGIN_CONTINUE    }    else {        cs_set_user_money(id, Money - Cost, 1)        if(cs_get_user_hasprim(id))            wpn_drop(id, PRIMARY_WEAPONS_BITSUM)        GiveWeapon(id, nr)        Weapon[id][nr] = false    }    return PLUGIN_CONTINUE} public GiveWeapon(id, nr) {    give_item(id, WeaponGive[nr])    cs_set_user_bpammo(id, get_weaponid(WeaponGive[nr]), WeaponBPAmmo[nr])    static Name[30]; get_user_name(id, Name, charsmax(Name))    ChatColor(0, "%s %s nusipirko %s", SHOPTAG, Name, GunMenu[nr])} public client_disconnect(id) {    arrayset(Weapon[id], false, sizeof(WeaponGive))} stock ChatColor(const id, const input[], any:...) {    new count = 1, players[32]    static msg[191]    vformat(msg, 190, input, 3)        if (id) players[0] = id    else get_players(players, count, "ch")    for (new i; i < count; i++) {        if (is_user_connected(players[i])) {            message_begin(MSG_ONE_UNRELIABLE, gmsgSayText, _, players[i])            write_byte(players[i])            write_string(msg)            message_end()        }    }} stock wpn_drop(index, wpn) {    new weapons[32], num, Weapon    get_user_weapons(index, weapons, num)        for (new i; i < num; i++) {        Weapon = weapons[i]                if (wpn & (1 << Weapon)) {            static wname[32]            get_weaponname(Weapon, wname, sizeof(wname) - 1)                        ham_strip_weapon(index, wname)        }    }    return} stock ham_strip_weapon(id,weapon[]) {    if(!equal(weapon,"weapon_",7)) return 0     new wId = get_weaponid(weapon)    if(!wId) return 0     new wEnt    while((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}    if(!wEnt) return 0     if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)     if(!ExecuteHamB(Ham_RemovePlayerItem, id, wEnt)) return 0    ExecuteHamB(Ham_Item_Kill, wEnt)     set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1 << wId))     return 1}
Nors nezinau ant kiek jis optimizuotas :D

bussinessman
Ar jis surinks 50 žinučių?
Posts: 39
Joined: 2011 Mar 25 09:56

Re: Keli amxx klausimai

Post by bussinessman »

Ne suprantat, man reikia, kad kiekvieną raundą duotų tuos ginklus.
Gal žinot "aha VIP system?" ten yra būtent su tais armor_active, armor_mode ir aš pagalvojau, kad gal nelabai taip gerai yra tiek kodų prirašyt?

Post Reply

Who is online

Users browsing this forum: No registered users and 39 guests