Page 1 of 5

Player Models

Posted: 2013 Mar 18 18:36
by hleV
Parašiau paprastą include'ą žaidėjų modelių keitimui. Turėtų būt patikimesnis už cs_set_user_model() ir neleidžia žaidėjams pasikeist modelio su "model" komanda.
Čia nėra nieko ypatingo, tik tiek kad nereikia naudot papildomo plugino su dynamic natives, kad nustatyt žaidėjui modelį (kaip kad ConnorMcLeod'o Player Models API).

Support'o custom hitbox'am (model index) nėra (prireikus, siūlau rinktis Player Models API).
Reikalauja Fakemeta ir CStrike modulių.

Funkcijos su aprašymais (include faile aprašymai angliški):

Code: Select all

/* * Precache'ina zaidejo modeli. * Taip pat bando precache'inti "T" faila, jei jis egzistuoja. * * model[]    modelio pavadinimas (pvz. "vip"). * late       nustatyti i true, jei modelis precache'inamas kitur, nei plugin_precache(). * * @return    modelio indeksas. */stock PrecachePlayerModel(const model[], bool:late = false); /* * Startuoja zaideju modelio naudojima. * * use         true - jei norima naudoti zaidejo modelius, false - nustoja naudoti zaidejo modelius. * * @PASTABA    Privaloma issaukti pries panaudojant SetPlayerModel(). Rekomenduotina plugin_init(). */stock UsePlayerModels(bool:use = true); /* * Nustato zaidejo modeli. * * client     zaidejo indeksas. * model[]    modelio pavadinimas (pvz. "vip"). Palikus tuscia, zaidejo modelis reset'inasi. */stock SetPlayerModel(client, const model[] = "");
SVARBU! Custom modeliai priskiriami pagal žaidėjų ID (indeksą), todėl jei modelį nustatinėjate pavieniams žaidėjams (pvz. VIP'ams ar admin'ams), žaidėjui atsijungiant (client_disconnect()) turėtumėt iššaukti SetPlayerModel(), kad kitas prisijungęs žaidėjęs ir gavęs tą patį ID negautų to pačio modelio:

Code: Select all

public client_disconnect(client){    SetPlayerModel(client);}
Pastaba: Panaudojus UsePlayerModels(false), visų žaidėjų modeliai neatsistatys į default'inius (ar bent jau iš karto). Tam reikėtų visiems žaidėjams (ar tiems, kuriems nustatėt custom modelius) iššaukti SetPlayerModel(client).
Pastaba: Nebūtina naudot PrecachePlayerModel(), galima naudot ir precache_model() ar engfunc() alternatyvą, tiesiog PrecachePlayerModel() dar patikrina, ar precache'inamas modelis dar turi papildomą failą <modelis>T.mdl ir jei taip - jį precache'ina.

Pavyzdinis pluginas, kuris nustatys kiekvienam teroristui "gign" (vienas iš CT skin'ų) ir kiekvienam CT "leet" (vienas iš teroristų skin'ų) modelius. Pastebėkit, jog šiuo atveju žaidėjui atsijungus nereikia reset'inti modelio, nes naujiems žaidėjams betkuriuo atveju bus priskirtas modelis vos tik jie pasirinks komandą.

Code: Select all

#include <amxmodx>#include <pmodel> public plugin_init(){    register_event("TeamInfo", "OnTeamInfo", "a"); // Uzregistruojam ivyki, kai zaidėjo komanda pasikeicia.        UsePlayerModels(); // Sita butina panaudot, kitaip SetPlayerModel() neveiks.} public OnTeamInfo(){    new client = read_data(1); // Gaunam zaidėjo ID iš ivykio.        // Imanoma, kad jis atsijunge, tad reikia patikrinti.    if (!is_user_connected(client))        return;        // Gaunam nauja zaidejo komanda is ivykio.    new team[2];    read_data(2, team, charsmax(team));        switch (team[0]) // Tikrinam pirma komandos raide.    {        case 'T': SetPlayerModel(client, "gign"); // Jei T, nustatom CT skin'a.        case 'C': SetPlayerModel(client, "leet"); // Jei CT, nustatom T skin'a.    }}
Instaliacija: Įkelkit pmodel.inc į include aplanką, o plugin'e prie include'ų prirašykit #include <pmodel>.

Re: Player Models

Posted: 2013 Mar 18 18:55
by Tetusis
nice one, gal ir komandu keitimo include'a parasytum kuris necrashintu apkeiciant 10x10+ (16x16 support)?

Re: Player Models

Posted: 2013 Mar 18 20:05
by hleV
Tetusis wrote:nice one, gal ir komandu keitimo include'a parasytum kuris necrashintu apkeiciant 10x10+ (16x16 support)?
Nu pabandžiau savo ankstesnį kodą paverst į include'ą, bet netestavau. Ir šiaip geriau modulį naudot.

Code: Select all

/* * Swaps team in groups, with delay. * * group    how many players to swap at once. * delay    time between swaps (min 0.1). */stock SwapTeams(group = 5, Float:delay = 0.1);

Re: Player Models

Posted: 2013 Mar 18 20:51
by Tetusis
hleV wrote:
Tetusis wrote:nice one, gal ir komandu keitimo include'a parasytum kuris necrashintu apkeiciant 10x10+ (16x16 support)?
Nu pabandžiau savo ankstesnį kodą paverst į include'ą, bet netestavau. Ir šiaip geriau modulį naudot.

Code: Select all

/* * Swaps team in groups, with delay. * * group    how many players to swap at once. * delay    time between swaps (min 0.1). */stock SwapTeams(group = 5, Float:delay = 0.1);

dekui, isbandysiu ateityje (:

Re: Player Models

Posted: 2013 Jun 29 19:12
by xFrostas
Norėjau paklausti ar šitaip keičiant, nebus tų visokių svc bad klaidų?

Re: Player Models

Posted: 2013 Jun 29 19:23
by Trickas
O tai gal nesunku būtų kam su šitu include padaryt admin skin pluginą, kad kitoks skinas būtų, nesinori pačiam klaidų pridirbt.

Re: Player Models

Posted: 2013 Jun 29 19:48
by xFrostas
Pagal mane tai taip

Code: Select all

#include <amxmodx>#include <hamsandwich>#include <pmodel> new const Admin_Model[] = "models/player/Admin/Admin.mdl" public plugin_precache(){    PrecachePlayerModel(Admin_Model)} public plugin_init(){    RegisterHam(Ham_Spawn, "player", "Fwd_Spawn", 1)     UsePlayerModels()} public client_disconnect(id){    SetPlayerModel(id)} public Fwd_Spawn(id){    if (!is_user_alive(id))        return     if (get_user_flags(id) & ADMIN_LEVEL_H) // Pasikeisi flag jei reiks    {        SetPlayerModel(id, Admin_Model)    }}

Re: Player Models

Posted: 2013 Nov 01 14:50
by Spag
Hm

Re: Player Models

Posted: 2014 Oct 05 12:47
by laimiukas3
Trickas wrote:O tai gal nesunku būtų kam su šitu include padaryt admin skin pluginą, kad kitoks skinas būtų, nesinori pačiam klaidų pridirbt.
tai ar galetu kas :)

Re: Player Models

Posted: 2014 Oct 05 13:00
by hleV
xFrosto kodas turėtų tikt tam, tik Admin_Model reikšmė turėtų būt ne pilnas kelias iki modelio, o tik jo pavadinimas (jo atveju tik "Admin").