Natyw zwraca tylko 1 literę
Best Answer Robiin 09.08.2019 17:07
Komiks007
09.08.2019
Cześć, jak mówi tytuł, natyw który zrobiłem przez plik inc, zwraca tylko jedną literę w innym pluginie. Chciałbym, żeby zwracał trzy litery zamiast jednej.
Kod jest taki:
Natyw:
public _g_nazwa_gildi(plugin, params) { new id = get_param(1); static aData[ GangInfo ] if(g_iGang[id] > -1) { ArrayGetArray( g_aGangs, g_iGang[ id ], aData ); return aData[GangName] } return 0; }
w inc:
/* * Zwraca litery nazwy gangu * * id - indetyfikator klienta * */ native g_nazwa_gildi(id)
i w pluginie, w którym chce żeby mi to zwróciło:
new szText[50 char] new nazwa_gildi = g_nazwa_gildi(id) formatex(szText, charsmax(szText), "%s", nazwa_gildi) szPrefix = szText
Na czacie zwraca tylko literę 't' ponieważ gildia nazywa się 'test'
Mógłby ktoś pomóc? Dzięki.
DarkGL
09.08.2019
Poczytaj o arraych teraz zwraca Ci jedną literą ponieważ tak naprawde zwracasz jedną wartość int
Robiin
09.08.2019
W amxxie nie możesz zwrócić więcej niż jednej wartości. Dlatego właśnie tworzymy osobną zmienną i robimy get_user_name(indeks, zmienna, charsmax(zmienna)) - przypisujemy nick gracza do 'zmienna' funkcją get_user_name i w ten sposób nie musimy nic zwracać.
Zamiast
return aData[GangName]
daj
set_string(2, aData[GangName], 32);
A w argumentach natywu zamiast
g_nazwa_gildi(id)
daj
g_nazwa_gildi(id, output[], outputSize);
Komiks007
09.08.2019
W amxxie nie możesz zwrócić więcej niż jednej wartości. Dlatego właśnie tworzymy osobną zmienną i robimy get_user_name(indeks, zmienna, charsmax(zmienna)) - przypisujemy nick gracza do 'zmienna' funkcją get_user_name i w ten sposób nie musimy nic zwracać.
Zamiast
return aData[GangName]daj
set_string(2, aData[GangName], 32);A w argumentach natywu zamiast
g_nazwa_gildi(id)daj
g_nazwa_gildi(id, output[], outputSize);
Coś źle robię najwidoczniej...
z 'test', wypisuje "est"
g_nazwa_gildi(id, "", 1)
Komiks007
09.08.2019
Pokaż cały kod, nie dawaj nam okruchów.
public handleSayText(msgId,msgDest,msgEnt){ if(!is_user_connected(id)) return PLUGIN_CONTINUE; new szTmp[192], szTmp2[192]; //new szPrefix[64] get_msg_arg_string(2, szTmp, charsmax(szTmp)); new szText[64 char] new nazwa_gildi = g_nazwa_gildi(id, "", 1) formatex(szText, sizeof(szText), "^x03|%s|", nazwa_gildi) if(!equal(szTmp,"#Cstrike_Chat_All")){ add(szTmp2, charsmax(szTmp2), "^x01"); add(szTmp2, charsmax(szTmp2), szText); //add(szTmp2, charsmax(szTmp2), szPrefix); add(szTmp2, charsmax(szTmp2), " "); add(szTmp2, charsmax(szTmp2), szTmp); } else{ new szPlayerName[64]; get_user_name(id, szPlayerName, charsmax(szPlayerName)); get_msg_arg_string(4, szTmp, charsmax(szTmp)); set_msg_arg_string(4, ""); add(szTmp2, charsmax(szTmp2), "^x01"); add(szTmp2, charsmax(szTmp2), szText); //add(szTmp2, charsmax(szTmp2), szPrefix); add(szTmp2, charsmax(szTmp2), "^x03 "); add(szTmp2, charsmax(szTmp2), szPlayerName); add(szTmp2, charsmax(szTmp2), "^x01 : "); add(szTmp2, charsmax(szTmp2), szTmp) } set_msg_arg_string(2, szTmp2); return PLUGIN_CONTINUE; }
Nawet nie wyświetlają się '|' oraz kolor do tego. Wyświetla się samo 'est' przed nickiem.
Prefix działał normalnie.
Robiin
09.08.2019
Nie mam pojęcia skąd ten kod wytrzasnąłeś i dalczego był napisany w ten sposób, ale był zły.
Edited by aSiorr, 09.08.2019 16:26.
Komiks007
09.08.2019
Nie mam pojęcia skąd ten kod wytrzasnąłeś i dalczego był napisany w ten sposób, ale był zły.
Spoiler
Zły? Z jakiegoś tematu to wytrzasnąłem żeby naprawić błąd s1: s2
No dobra, teraz w ogóle nie wyświetla nazwy gildii.
'|| Nick: Wiadomość'
Komiks007
09.08.2019
A jak wygląda natyw?
Tak jak podałeś w wcześniejszym poście,
native g_nazwa_gildi(id, output[], outputSize);
public _g_nazwa_gildi(plugin, params) { new id = get_param(1); static aData[ GangInfo ] if(g_iGang[id] > -1) { ArrayGetArray( g_aGangs, g_iGang[ id ], aData ); set_string(2, aData[GangName], 32); } }
Best Answer
Robiin
09.08.2019
Komiks007
09.08.2019
Te twoje kolizje nazw to szok. Teraz powinno być dobrze:
Spoiler
Uwaga... działa!
Dzięki aSiorr za pomoc Nagrodzę tym co mogę. Jeszcze raz dziękuje.