Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ INCLUDE ] Zmiana modelu gracza


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
3 odpowiedzi w tym temacie

#1 diggs

    Wszechwidzący

  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 12.09.2011 20:25

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

  • +
  • -
  • 4

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png


#2 stepdub

    Profesjonalista

  • Użytkownik

Reputacja: 43
Pomocny

  • Postów:207
  • Lokalizacja:Kobyłka
Offline

Napisano 13.09.2011 14:11

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 ^^
  • +
  • -
  • 0

#3 diggs

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:229
  • Lokalizacja:Internet
Offline

Napisano 13.09.2011 15:06

@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.
  • +
  • -
  • 0

cFun.pl BaseBuilderPro v6.5.8 Tirant edit by diggs
IP: 80.82.16.66:27034
b_350_20_D91408_470002_FFFFFA_000000.png

cFun.pl Only AWP - 1000 FPS [SkinsMod]
IP: 80.72.42.113:27015
b_350_20_F8D241_B69427_0F100D_000000.png


#4 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 13.09.2011 16:05

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




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych