Podmiana modeli graczy na serwerze.
Ox!d3
20.11.2008
Witam
Próbuję z kumplem napisać plugin na potrzeby naszego klanu, który będzie podmieniał model gracza w CT lub TT ale tylko osobom, których steam_id będzie się zgadzało z tym, które będzie podane w pliku źródłowym. Konkretny model przypisany do gracza o danym steam_id ma być widoczny dla wszystkich graczy wbijających na serwer bez względu na to jaki model CT lub TT wybiorą. Należy także uwzględnić widoczność podmienionych modeli po użyciu w grze komendy cl_minmodels 1.
Proszę o poprawne zmodyfikowanie kodu, który udało nam się napisać do tej pory:
Jeśli nie sprawi to kłopotu, to prosiłbym także o napisanie 2 wersji tego pluginu, w której będzie można wpisać steam_id graczy, których model ma zostać podmieniony, w osobnym pliku o nazwie np. sidmodels.ini, umieszczonym w lokalizacji cstrikeaddons/amxmodx/configs.
Próbuję z kumplem napisać plugin na potrzeby naszego klanu, który będzie podmieniał model gracza w CT lub TT ale tylko osobom, których steam_id będzie się zgadzało z tym, które będzie podane w pliku źródłowym. Konkretny model przypisany do gracza o danym steam_id ma być widoczny dla wszystkich graczy wbijających na serwer bez względu na to jaki model CT lub TT wybiorą. Należy także uwzględnić widoczność podmienionych modeli po użyciu w grze komendy cl_minmodels 1.
Proszę o poprawne zmodyfikowanie kodu, który udało nam się napisać do tej pory:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init() {
register_plugin("AMX LaResistance Model", "1.0", "siC")
register_event("ResetHUD", "resetModel", "b")
return PLUGIN_CONTINUE
}
public plugin_precache() {
precache_model("models/player/lars_ct/gracz1_ct.mdl")
precache_model("models/player/lars_te/gracz1_te.mdl")
return PLUGIN_CONTINUE
}
public resetModel(id, level, cid) {
new CsTeams:userTeam = cs_get_user_team(id)
// Pobranie userid graczy z serwera
new userid = get_user_userid(32)
if (userTeam == CS_TEAM_T) {
// Chcemy dla unikalnego steamid zmienić model gracza, w tym przypadku dla 5 osób drużyny, każdy gracz ma własny model
// Zwraca błąd error 033: array must be indexed (variable "-unknown-")
if (userid == "STEAM_x:x:xxxxxxx") {
cs_set_user_model(id, "gracz1_te")
}
}
else if(userTeam == CS_TEAM_CT) {
// Chcemy dla unikalnego steamid zmienić model gracza, w tym przypadku dla 5 osób drużyny, każdy gracz ma własny model
// Zwraca błąd error 033: array must be indexed (variable "-unknown-")
if (userid == "STEAM_x:x:xxxxxxx") {
cs_set_user_model(id, "gracz1_ct")
}
}
else {
cs_reset_user_model(id)
}
return PLUGIN_CONTINUE
}Jeśli nie sprawi to kłopotu, to prosiłbym także o napisanie 2 wersji tego pluginu, w której będzie można wpisać steam_id graczy, których model ma zostać podmieniony, w osobnym pliku o nazwie np. sidmodels.ini, umieszczonym w lokalizacji cstrikeaddons/amxmodx/configs.
darkman
20.11.2008
pierwsza zasada
Sprawdza się to inaczej poprzez contain, albo equal. contain sprawdza czy tablica zawiera jakis ciag znakow a equali porównuje 2 stringi do siebie i zwraca 1(true) jeżeli są takie same
tutaj najlepiej użyć get_players() i pętli for, znajde potem chwile to pokaże jak
if(userid == "STEAM_x:x:xxxxxxx")
Sprawdza się to inaczej poprzez contain, albo equal. contain sprawdza czy tablica zawiera jakis ciag znakow a equali porównuje 2 stringi do siebie i zwraca 1(true) jeżeli są takie same
new userid = get_user_userid(32)
tutaj najlepiej użyć get_players() i pętli for, znajde potem chwile to pokaże jak
siC
20.11.2008
Z całym szacunkiem darkman, ale ciężko się przesiąść w ciągu 1 dnia z innego języka na ten. Próbowałem, ale zbyt wiele niewiadomych dla mnie. Między innymi nie wiem jak definiować całe ciągi string...
$str = "ciag";np.. dla mnie to coś w stylu
new str = "ciag". Mógłbyś nam to napisać? wiem, że to banalne jednak potrzebne są podtsawy do tego , których ja niestety nie mam
choyrack
20.11.2008
siC, PHP bym językiem programowania nie nazwał...
PS. Logiczne myślenie i znajomość funkcji to co innego
PS. Logiczne myślenie i znajomość funkcji to co innego
mgr inż. Pavulon
20.11.2008
ciągi definiujesz w stylu:PHP – obiektowy, skryptowy język programowania zaprojektowany do generowania dynamicznych stron internetowych
new wyraz [ max_dlugosc ]
format ( wyraz, max_dlugosc-1, "tekst" )
albo
format ( wyraz, max_dlugosc-1, "tekst %d %s", liczba, ciag )
siC
20.11.2008
Pavulon dzięki za wstawkę za mną 
Ok zaraz pokombinuje z tym i zobaczymy co mi z tego wyjdzie analogicznie do wszystkich wypowiedzi poza choyrack
Ok zaraz pokombinuje z tym i zobaczymy co mi z tego wyjdzie analogicznie do wszystkich wypowiedzi poza choyrack
Miczu
20.11.2008
Mozna by tez zoptymalizowac to przez uzycie eventa od przylaczenia do teamu
Zalety: od razu z eventem bedzie przekazywana informacja o teamie gracza, jak sie doda sprawdzenie czy team sie nie zmienil (bo zmienic model trzeba tylko gdy gracz przejdzie z ct do tt chyba [i na odwrot]) to sie zaoszczedzi niepotrzebnego co rudne zmieniania modelu na ten sam ;-)
#include <amxmodx>
#include <amxmisc>
public plugin_init()
{
register_event("TeamInfo","team_assign","a")
}
public team_assign()
{
new id = read_data(1)
new Team[32]
read_data(2,Team,31) //UNASSIGNED
//TERRORIST
//CT
//SPECTATOR
}Zalety: od razu z eventem bedzie przekazywana informacja o teamie gracza, jak sie doda sprawdzenie czy team sie nie zmienil (bo zmienic model trzeba tylko gdy gracz przejdzie z ct do tt chyba [i na odwrot]) to sie zaoszczedzi niepotrzebnego co rudne zmieniania modelu na ten sam ;-)
siC
20.11.2008
Miczu a byłbyś w stanie napisać nam cały taki plugin? Oczywiście w grę wchodziłaby też możliwość zapłaty
mgr inż. Pavulon
20.11.2008
precache_model("models/player/lars_ct/gracz1_ct.mdl")
precache_model("models/player/lars_te/gracz1_te.mdl")a i te modele raczej nie przejdą:folder (prawdopodobnie) musi mieć taką samą nazwę jaki model, tj:
precache_model("models/player/gracz1_ct/gracz1_ct.mdl")
precache_model("models/player/gracz1_te/gracz1_te.mdl")
siC
20.11.2008
Tak tak, wiemy, ale niekoniecznie. Tu wchodziłyby nazwy takie jak lars/gign_sic.mdl , lars/leet_sic.mdl i dla każdego gracza takie coś, ale nawet gdyby to tworzyłyby się katalogi, katalog przecież nie zajmuje nic
Miczu
20.11.2008
siC, jestem w stanie napisac trudniejsze rzeczy ;-)
Ale byl bym draniem gdybym zabral ci projekt w polowie, poza tym nie chce ci odbierac satysfakcji z ogladania efektow pracy pluga ktory samemu sie napisalo
Ale byl bym draniem gdybym zabral ci projekt w polowie, poza tym nie chce ci odbierac satysfakcji z ogladania efektow pracy pluga ktory samemu sie napisalo
siC
20.11.2008
Jakoś mnie nie bawi i nie satysfakcjonuje pisanie takiego czegoś, mam dość pisania i ogladania już efektów swojej pracy? Wiec jak?
Miczu
20.11.2008
Niestety nie mam czasu, ale jak bedziesz potrzebowal pomocy i będę na stronce to zawsze popchne w dobrym kierunku
siC
20.11.2008
Miczu, Ubolewam nad tym
Ok, w takim razie wg mojego myslenia zrobiłem dla 1 usera na razie i udało się przekompilować bez błędów, tylko zostaje poprawność tego co wymodziłem
Zaraz sprawdzimy na serwerze... Macie jakieś pomysły? Ps. Nie wiem jak z tym eventem. Totalnie zielony w scriptingu amxx
Ok, w takim razie wg mojego myslenia zrobiłem dla 1 usera na razie i udało się przekompilować bez błędów, tylko zostaje poprawność tego co wymodziłem
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init() {
register_plugin("AMX LaResistance Model", "1.0", "siC")
register_event("ResetHUD", "resetModel", "b")
return PLUGIN_CONTINUE
}
public plugin_precache() {
precache_model("models/player/sic_ct/sic_ct.mdl")
precache_model("models/player/sic_te/sic_te.mdl")
return PLUGIN_CONTINUE
}
public resetModel(id, level, cid) {
new CsTeams:userTeam = cs_get_user_team(id)
new Players[32]
new playerCount, i, player
get_players(Players, playerCount)
for (i=0; i<playerCount; i++) {
new sic[18]
format ( sic, 17, "STEAM_0:1:1111111" )
if (userTeam == CS_TEAM_T) {
if (equali(Players[i], sic)) {
cs_set_user_model(id, "sic_te")
}
}
else if(userTeam == CS_TEAM_CT) {
if (equali(Players[i], sic)) {
cs_set_user_model(id, "sic_ct")
}
}
else {
cs_reset_user_model(id)
}
}
return PLUGIN_CONTINUE
}
Miczu
20.11.2008
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init()
{
register_plugin("AMX LaResistance Model", "1.0", "siC")
register_event("TeamInfo","team_assign","a")
}
public plugin_precache() {
precache_model("models/player/sic_ct/sic_ct.mdl")
precache_model("models/player/sic_te/sic_te.mdl")
return PLUGIN_CONTINUE
}
public team_assign()
{
static old_team[33]
new tid
new id = read_data(1)
new Team[32]
read_data(2,Team,31) //UNASSIGNED
//TERRORIST
//CT
//SPECTATOR
if(equal(Team,"UNASSIGNED")) tid = 0
else if(equal(Team,"TERRORIST")) tid = 1
else if(equal(Team,"CT")) tid = 2
else if(equal(Team,"SPECTATOR")) tid = 3
if(old_team[id]==tid) return PLUGIN_CONTINUE
old_team[id] = tid
new sid[35]
get_user_authid ( id, sid, 34 )
if(equali(sid,"STEAM_0:1:1111111" ))
{
if (tid == 1)
{
cs_set_user_model(id, "sic_te")
}
else if (tid == 2)
{
cs_set_user_model(id, "sic_ct")
}
}
return PLUGIN_CONTINUE
}
siC
20.11.2008
Miczu sid? bo mamy wątpliwości czy to jest poprawne, przepraszam za arogancję i wiarę w Twoją pracę ale wiesz... zależy nam na tym
Miczu
20.11.2008
new sid[35]
get_user_authid ( id, sid, 34 )Nazwa zmiennej nie ma duzego znaczenia, jakbym dal nawet
new ip[35]
get_user_authid ( id, ip, 34 )
if(equali(ip,"STEAM_0:1:1111111" ))to nie zmienia faktu jakie dane sa przechowywane w zmiennej.PS. wtedy zle uzywales eventa ResetHUD - jest on bez parametrowy i nie przekazuje ani ID gracza, ani niczego innego ;-)
[ Dodano: 20-11-2008, 23:17 ]
PS2. sid to powszechny skrot dla Steam ID
siC
20.11.2008
W każdym razie moja wersja nie działa, widocznie źle zmienia lub sprawdza sid
zaraz sprawdzę Twoją
Miczu
20.11.2008
O ile masz steam id = STEAM_0:1:1111111 to zadziala
(ale licze na to ze dasz swoj dobry :F
siC
20.11.2008
Oczywiście, że dałem poprawny
za kretyna mnie masz
Możesz wbijesz na tsa z nami pogadać
Bo od walki i piwa mnie łeb już boli
Z Twoim pluginem nie chce wystarować serwer ;f




