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

Znaki UTF-8


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

#1 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 26.07.2010 22:24

*
Popularny

Znaki UTF-8

Wszystkie wyjścia tekstowe silnika HalfLife`a obsługują kodowanie UTF-8, ale kompilator amxxa już nie AMXX Studio już nie. Jak więc uzyskać dostęp do specjalnych znaków?

Można zapisać plik .sma w UTF-8 bez BOM i wtedy skompilować.


Albo ręcznie:

Godne uwagi jest to, że używane są 2 komórki pamięci na znak. Tekst złożony z 3 znaków UTF-8 będzie zatem długości 6+1.

Z tej tabeli bierzemy kod interesującego nas znaku (stronnicowane)
Unicode/UTF-8-character table


chciałbym napisać w konsoli bąk zamiast bak, znalazłem

U+0105 ą c4 85 LATIN SMALL LETTER A WITH OGONEK

kod= C4 85

Pierwszy bajt wrzucamy do pierwszej komórki, drugi do drugiej; oba sumujemy bitowo z 0xFFFFFF00
C4 | 0xFFFFFF00 = 0xFFFFFFC4
85 | 0xFFFFFF00 = 0xFFFFFF85

new szTemp[] = { 0xFFFFFFC4, 0xFFFFFF85, 0}
console_print(0, "b%sk", szTemp)
amxx.pl-1280179335-U2873.jpg

Przy znakach jednobajtowych (np. @) pierwszy bajt to 0xFF a drugi to kod znaku.

Dosyć niewygodne w użyciu, ale gdy chcesz ozdobić jakiś tekst specjalnym znakiem lub dodać ogonki do polskich tekstów to w sam raz smile.gif


Edit:
Można umieścić znaki od razu w stringu:
console_print(0, "b^xC4^x85k")

  • +
  • -
  • 9

#2 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 26.07.2010 23:59

Ciekawe a moze napisac jakas funckcje/stock gdzie jako parametr bedzie tablica i nr
nr to bedzie rodzaj litery a do tablicy bedzie wpisany kod

np
public to_utf(tablica[3],wybor){
        switch(wybor){
                  case 1:{
                           tablica={ 0xFFFFFFC4,  0xFFFFFF85, 0}
                  }
        }
}

uzycie :

new tab[3] 
to_utf(tab,1)
console_print(0, "b%sk",tab)


  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#3 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 27.07.2010 00:27

#define PL_A 0xC485

stock utf8(c){
	new szTemp[3];
	szTemp[0] = (c&0x0000FF00)>>8 | 0xFFFFFF00;
	szTemp[1] = (c&0x000000FF) | 0xFFFFFF00;
	szTemp[2] = 0;
	return szTemp;
}

public next(){
	console_print(0, "b%sk", utf8(PL_A) );
}
można dorobić więcej stałych i .inca skleić

Edit.
Haha xD
client_cmd(id, "say ^"Cze%s%s^"", utf8(0xC59B), utf8(0xC487));

  • +
  • -
  • 2

#4 Gość_Maestro_*

  • Gość

Reputacja: 0

Offline

Napisano 27.07.2010 08:43

A jak np dodam langi i ten plik langow zapisze w UTF-8, i mam tam polskie znaki to wyswietli je?

#5 Apple()

    Wszechpomocny

  • Użytkownik

Reputacja: 129
Zaawansowany

  • Postów:398
  • Steam:steam
  • Lokalizacja:Długość geo. 22.632246 szerokość 51.221584
Offline

Napisano 27.07.2010 08:47

Nie, te polskie znaki masz mieć w kompilatorze(tzn nie polskie a za pomocą bitów zapisujesz je na polskie) a kompilator ma info z bitów że tu będzie polski znak "ą" i "ś" i konwertuje to do pluginu amxx. Ciekawe jak to w praktyce na hudmessage :)
  • +
  • -
  • 2

#6 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 27.07.2010 12:26

Hmm a jeżeli chce zrobić, że jeżeli gracz wpisze "coś" i to "coś" bedzię zawierać "a" to żeby zmieniło na ą to jak to mam zrobić? Próbowałem tak

public handle_say(id) {
new said[192]
new name[33]
get_user_name(id, name, 32)
new szTemp[] = { 0xFFFFFFC4, 0xFFFFFF85, 0}

read_args(said,192)
if( ( containi(said, "!a") != -1 )){
#if defined _colorchat_included
ColorChat(0, NORMAL, "^x03%s^x01 : %s", name, szTemp)
#endif
#if !defined _colorchat_included
client_print(0, print_chat, "%s : %s %s", name, said, szTemp)
#endif
return PLUGIN_HANDLED
}
else
{
return PLUGIN_CONTINUE
}
return 1
}


ale zawsze same ą bylo :P

EDIT: Tak, juz wiem ze moglem to zrobic przez client_cmd :P

Użytkownik Diablix edytował ten post 27.07.2010 12:41

  • +
  • -
  • 1

#7 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 27.07.2010 13:11

@Maestro

jak np. dodam langi i ten plik langow zapisze w UTF-8

tak też zadziała

@Apple()
te znaki lekko odcinają się od reszty, pisane są inną czcionką :P

@Diablix
replace_all

replace_all(said, charsmax(said), "!a", szTemp);

  • +
  • -
  • 2

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 27.07.2010 17:19

Czytałem o tym już jakiś czas temu... R3X można łatwiej:

Spoiler

  • +
  • -
  • 1

#9 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 27.07.2010 17:46

Hmm co jest nie tak? Wpisuje !a i sie pokazuje normalnie !a :D

public handle_say(id) {
new said[192]
new szTemp[20] = { 0xFFFFFFC4, 0xFFFFFF85, 0}
read_args(said,192)

if( ( containi(said, "!a") != -1 )){
replace_all(said, charsmax(said), "!a", szTemp)
}
}

  • +
  • -
  • 0

#10 Kubaczek <3

    Zaawansowany

  • Użytkownik

Reputacja: 17
Początkujący

  • Postów:116
  • Steam:steam
  • Lokalizacja::)
Offline

Napisano 28.07.2010 05:35

Ja mam if(equali...) i pyka. I nie kopiuj ode mnie pomysłu z !a :D Sprobój zmienić read_args(said,192) na read_args(id,said,192). Zamiast replace_all mam też replace(...)

Użytkownik kubaku4 edytował ten post 28.07.2010 05:37

  • +
  • -
  • 0

#11 dayman

    Pomocny

  • Użytkownik

Reputacja: 14
Początkujący

  • Postów:66
  • Lokalizacja:Kazahstan
Offline

Napisano 19.09.2010 22:18

Czy takie wstawianie polskich znaków obciąża bardziej serwer ?
  • +
  • -
  • 0

#12 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 19.01.2011 16:20

to nie obciąża w jakiś specjalny sposób to jest tylko informacja dla kompilatora -_-
  • +
  • -
  • 0

#13 kam7

    Życzliwy

  • Użytkownik

Reputacja: 11
Początkujący

  • Postów:35
  • Lokalizacja:Torun
Offline

Napisano 29.06.2011 12:39

Miczu sposób z kodowaniem UTF-8 działa, jednak nie do końca.
Jeżeli wiadomość jest wyświetlana bezpośrednio w konsoli polskie znaki działają.
Jeżeli wiadomość jest wyświetlana na ekranie podczas gry, polskie znaki również działają,
lecz potem ta wiadomość w konsoli (po jakimś czasie wiadomości na say, itd. pojawiają się w konsoli) nie posiada polskich znaków.

Np piszemy na say: timeleft
Serwer zwraca: Pozostało czasu: ...
Ale w konsoli pojawia się: Pozostao czasu: ...

Można jakoś zaradzić w 'przenoszeniu' tych znaków? nie chodzi mi tu o inne sposoby opisane w temacie typu pluginy.

Użytkownik kam7 edytował ten post 29.06.2011 12:41

  • +
  • -
  • 1

#14 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 30.06.2011 12:24

Nie wiem czy można coś z tym zrobić.

Metodę opisaną w tym temacie można skrócić do zapisu
dla

U+0119 ę c4 99 LATIN SMALL LETTER E WITH OGONEK

log_amx("Testuj^xC4^x99");

  • +
  • -
  • 0

#15 ErroR'S

    Profesjonalista

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:162
  • GG:
  • Steam:steam
  • Imię:Kamil
  • Lokalizacja:L-wo
Offline

Napisano 30.06.2011 12:32

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Miczu"
 
 
public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("say /test","test_test")
}

public test_test(id)
{
        client_print(0,print_chat,"ęąśżźćółń ĘĄŚŻŹĆÓŁŃ")
}

Jak bym zamienił to na
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Miczu"
 
 
public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("say !a ","test_test")
}

public test_test(id)
{
        client_print(0,print_chat,"ą")
}

To po wpisaniu na say !a wyświetli mi się ą? Bo niewiem czy dobrze załapałem bo jeśli tak to napisze pare takich wersji na każdą polską literę
  • +
  • -
  • 0

#16 R3X

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 30.06.2011 12:45

Tak to zadziała jak skompilujesz sma kodowane w UTF-8 właśnie
  • +
  • -
  • 0




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

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