←  Gotowe funkcje

AMXX.pl: Support AMX Mod X i SourceMod

»

[ INCLUDE ] Zmiana modelu gracza

  • +
  • -
diggs - zdjęcie diggs 12.09.2011

Witam, na wstępie dodam, że to jest mój pierwszy raz - pierwszy raz kiedy robiłem coś w tym stylu :D.

Ok. Stworzyłem coś w rodzaju biblioteki, może bardziej jakiegoś stocka, może stworzyłem to za dużo powiedziane ale o tym niżej.

Zastosowanie:
Łatwa i przyjazna użytkownikowi zmiana modelu gracza bez błędu gry SVC_BAD związanego z modelami graczy.

Przygotowanie do użytku:
Na samym początku naszego pluginu dołączamy linijke:
#include <playermodel>
Aby wszystko działało poprawnie wymagane jest umieszczenie jeszcze 3 dodatkowych funkcji w odpowiednich miejscach naszego pluginu w którym będziemy podmieniać modele graczy;
1) funkcja player_model_init() musi być umieszczona w plugin_init(), im wyżej tym lepiej, przykład:
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

player_model_init();

// dalszy ciag funkcji
}
2) funkcje player_model_putinserver(id) umieszczamy w client_putinserver(id), przykład:
public client_putinserver(id)
{
player_model_putinserver(id);
// dalszy ciag funkcji
}
3) ostatnią funkcje player_model_disconnect(id) umieszczamy w client_disconnect(id), przykład:
public client_disconnect(id)
{
player_model_disconnect(id);
// dalszy ciag funkcji
}

Użycie:
Całość okraja się do posługiwania się dwoma funkcjami fm_reset_user_model(id) oraz fm_set_user_model(id, model_name[]).

Funkcja fm_reset_user_model służy do zmiany modelu gracza na standardowy, jako argument przyjmuje index gracza któremu chcemy zresetować model. Funkcja zwraca "true" jeśli wszystko udało się pomyślnie, "false" kiedy wystąpił jakiś problem.

Funkcja fm_set_user_model służy do zmiany modelu gracza na niestandardowy, jako argumenty funkcji podajemy index gracza któremu chcemy zmienić model oraz nazwę modelu na jaki ma zostać on zmieniony. Funkcja zwraca "true" gdy zamiana się udała oraz "false" kiedy wystąpił jakiś problem.

Uwaga: aby móc zmienić model nadal należy użyć funkcji precache_model() w plugin_precache(), tak jak to było w przypadku użycia funkcji cs_set_user_model().

Przykład:
#include <amxmisc>
#include <amxmodx>
#include <hamsandwich>
#include <playermodel>
public plugin_precache()
{
precache_model("models/player/custom_model/custom_model.mdl");
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

player_model_init();
RegisterHam(Ham_Spawn, "player", "vip_spawn", 1);
}
public client_putinserver(id)
{
player_model_putinserver(id);
}
public client_disconnect(id)
{
player_model_disconnect(id);
}
public vip_spawn(id)
{
  if(is_user_alive(id))
  {
   new CsTeams:playerteam = cs_get_user_team(id);
  
   if(playerteam == CS_TEAM_CT)
   {
	fm_set_user_model(id, "vip_ct");
   }
  }
}

Kilka słów na koniec:
Jak wspomniałem wyżej "Stworzyłem coś w rodzaju biblioteki", to nie tak do końca prawda ponieważ większość "wyciągnąłem" z pluginu Base Builder 6.5 by Tirant i opierając się na dziele Ortega (http://amxx.pl/topic...odels-extended/) powstało to co mam wam dziś do zaprezentowania.

"Biblioteka" jest sprawdzona, to znaczy podmienia modele, nie wiem czy występują błędy przy podmienie większej ilości modeli.

Publikuję to bo może komuś jeszcze się przyda i może ktoś mądrzejszy dostrzeże ewentualne błedy czy wpadnie na pomysł rozwinięcia "biblioteki".

Załączone pliki


Użytkownik diggs edytował ten post 07.01.2012 19:35
Odpowiedz

  • +
  • -
stepdub - zdjęcie stepdub 13.09.2011

public client_disconnect(id)
{
player_model_disconnect(id);
// dalszy ciag funkcji
}

To jest nie potrzebne, chyba, że coś pominąłem lub chcesz w jakiś sposób ograniczyć zużycie pamięci(?)
Ponieważ, gdy index już się łączy ustawia mu
g_isCustomModel_pm[id] = false;

więc po co robić to przy odłączeniu od serwera drugi raz? Bądź też na odwrót - co jest raczej lepszym wyjściem ^^
Odpowiedz

  • +
  • -
diggs - zdjęcie diggs 13.09.2011

@G[o]Q - też myślałem że to wystarczy ale przy zmianie modeli wszystkim graczom z teamu czy na serwerze mogą pojawić się błedy. Zobacz http://amxx.pl/topic...-sposob-lepszy/.

@Skull3D - na wstępie napisałem że jest to moja pierwsza tego typu praca.

@stepdub - to bardziej mój nawyk (jak się okazuje nie tylko mój bo sporo osób tak robi) wole dla bezpieczeństwa skasować wszystkie dane dotyczące konkretnego gracza przy jego łączeniu i rozłączeniu.
Odpowiedz

  • +
  • -
Fili:P - zdjęcie Fili:P 13.09.2011

Też chciałem to zrobić, ale nie miałem pomysłu jak, fajnie wyszło, na pewno będę używał, leci +
Odpowiedz