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
 

Maneta Majster - zdjęcie

Maneta Majster

Rejestracja: 10.05.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 18.06.2010 06:51
-----

#113239 struktura programu oraz podstawy programowania w C++

Napisane przez G[o]Q w 19.02.2010 21:26

Zacznę od tego co to jest w ogóle c++ jest to obiektowy język programowania dający nam bardzo duże możliwości można w nim stworzyć praktycznie wszystko i idealnie nadaje się dla początkujących programistów jak i dla zaawansowanych.Możemy w nim stworzyć proste programy które mogą służyć do nauki czy tez do wykonania jakichś prostych zadań lub tez zaawansowane programy które będą używane tez przez innych.

Zacznijmy od tego ze każdy program trzeba skompilować nie będę tu wchodził w szczegóły typu linkowanie i tym podobne ponieważ to jest dla początkujących nie istotne,używanym prze zemnie kompilatorem jest dev c++ którego polecam.


A wiec zaczynamy każdy program składa się z:


a) dyrektyw pre-procesora :
najważniejsza dyrektywa to
#include <nazwa biblioteki>
która dołącza moduły do naszego programu bez niej żaden program by się nie uruchomił,najczęściej będziemy używać biblioteki "iostream" wiec
deklarować będziemy tak :
#include <iostream>
. O innych dyrektywach pre-procesora później.
b)deklaracji przestrzeni nazw (opcjonalnie)
przestrzeń nazw jest to coś co znacznie ułatwi nam prace ponieważ skróci nazwy naszych funkcji o zapis

"przestrzeń_nazw"::"nazwa funkcji".

Juz tłumacze przestrzenie nazw są takie jakby katalogi w których przechowywane są nazwy funkcji, zostało to wprowadzone z prostego powodu a mianowicie każdy użytkownik może sobie napisać swoje biblioteki i dodać je do programu żeby zapobiec dublowaniu się nazw funkcji czyli sytuacji gdy 2 osoby nazwa dwie różne funkcje tak samo wprowadzono właśnie przestrzenie. Przestrzenie deklarujemy w sposób następujący :
using namespace nazwa_przestrzeni;
np using namespace std; czyli skrót od standard;
c) funkcji głównej
funkcja główna jest to nieodzowny element każdego programu to od niej zaczyna się wykonanie naszego codu. Najczęściej ma ona postać :
int main(){

		}
funkcja główna może oczywiści mieć parametry ale w początkowych programach ta funkcja nie będzie ich miała

Wiec to były najważniejsze elementy programu a teraz coś więcej o języku:


a) deklaracja zmiennych :
zmienne deklarujemy wg następującego schematu :

typ_danych nazwa

typy danych to min :
int,short,long,double,float,char,bool
przykładowa deklaracja:
int zmienna;
b)deklaracja i definicja funkcji
funkcje deklarujemy podobnie jak zmienne a mianowicie :
typ_wyniku nazwa_funkcji(parametry){

		}
np:
double funkcja(int a,int <img src='https://amxx.pl/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />
dodatkowo każda funkcja powinna być zdefiniowana pod instrukcja using namespace
wygląda to tak
typ_wyniku nazwa(parametry);
czyli może to być kopia nagłówka funkcji , nie musimy tego stosować wtedy gdy nie chcemy używać funkcji ostatniej w programie w funkcji 2 lub 3 czyli jeśli nie chcemy odwoływać się w tył
dodatkowo funkcja może przyjmować typ wyniku void oznacza to ze nie zwraca ona wyniku w innym wypadku w każdej funkcji powinniśmy użyć return żeby zwrócić jakaś wartość
c)ramy programu
każdy blok mający więcej niż jedna instrukcje powinien zawierać się w "{" i "}"
d)średniki
średnik dajemy po każdej instrukcji z wyjątkiem pętli for oraz while ,nagłówka funkcji dyrektyw pre-procesora
e) pętle:
w języku c++ wyróżniamy 3 rodzaje pętli :

-for
-while
-do-while


pętla for ma postać :

for (wartość_początkowa_licznika;warunek_wykonania_pętli;instrukcja_krokowa)

np
for (int i=0;i<10;i++)
wykona podane działanie 10x
pętla while ma postać:

while(warunek){
kod
}

np
while(i<10){
			i++
			}
pętla do - while ma postać

do{
kod
}while(warunek);

np
do{
			i++
			}while(i>10);
f) instrukcja warunkowa:
instrukcja warunkowa to instrukcja wykonująca się jeżeli warunek jest spełniony ma ona postać :

if(warunek){
jeśli warunek prawdziwy to ...
}
else jeśli warunek nie prawdziwy

g)operatory:
"==" - sprawdzenie czy wyrażenia po lewej stronie jest równe wyrażeniu po prawej stronie np 1==2-1
"=" - operator przypisania np int a=5
"!=" - operator negacji np 1!=4
"||" - operator "lub" stosowany w pętlach do oraz while i instrukcjach warunkowych aby dać instrukcji kilka możliwości np if((a==1)||a==2))
"&&"- operator sumy logicznej czyli "i" stosowany w pętlach do oraz while i instrukcjach warunkowych aby wykonać kod jeśli jednocześnie kilka warunków jest spełnione np if((a==1)&&(b==2))
"%" - operator reszty z dzielenia np 10%10 zwróci 0 a 11%10 zwróci 1
"++" - zwiększa wartość zmiennej stojącej po lewej stronie o 1

h) instrukcje wejścia/wyjścia:
Podstawowa instrukcja wyjścia jest

std::cout<<"text";

pisze ona podany text na ekranie
jeśli mamy zadeklarowana przestrzeń nazw to jest to

cout<<"text";

przy stosowaniu musimy jednak pamiętać o tym ze aby wyświetlić wartosc zmiennej po texcie musimy zrobić tak
cout<<"text"<<zmienna;
w tej instrukcji mamy do dyspozycji kilka znaków specjalnych:

"\n" lub "endl;"- przejście do nowej linii
"\t" wstawienie znaku tabulacji
"\r" usuniecie textu z ostatniej linijki
aby wyświetlić znak podając kod asci używamy operatora rzutowania char(kod) np cout<<"znak o kodzie 70 to "<<char(#70);

Podstawowa instrukcja wejścia jest

cin>>nazwa zmiennej;

wczytuje ona wartość zmiennej do naszego programu
przykład:
cout<<"podaj liczbę";int liczba;
				cin>>liczba;
				cout<<"wprowadzona liczba to "<<liczba;
i) instrukcje przerwania:
instrukcje przerywające jaka czynność w programie:

break- kończy aktualny blok instrukcji
continue - pomija jeden cykl pętli (nie cala pętle tylu 1 "obrót")
exit(1) - kończy program


  • +
  • -
  • 10


#134203 Błędy na wszystkich stronach

Napisane przez Szyfrant w 11.05.2010 18:25

admin.amxx ; admin base (required for any admin-related)
admin_sql.amxx ; admin base - SQL version (comment admin.amxx)
mini_bans.amxx
amxbans.amxx ; amxbans
admin_amxbans.amxx


Zdecyduj się/
mini bans czy AMXBans

admin z users.ini czy z bazy

wyłacz

admin_sql.amxx

i

sqlite w modules
  • +
  • -
  • 1


#113645 Generowanie statusu serwera

Napisane przez mgr inż. Pavulon w 21.02.2010 16:05

Żeby otrzymać bannerek z danymi serwera podobny do tego: Dołączona grafika możemy skorzystać z biblioteki GD2 dostępnej w PHP oraz klasy PQ której użyjemy do pobrania danych o serwerze. Aby otrzymać przyjazne linki wykorzystamy również mod_rewrite aby zamiast rozszerzenia .php mieć np .png

GD2 musi być zainstalowane na serwerze, PQ jest w załączniku

Pobieramy i wypakowujemy załącznik: Załączony plik  server.zip   227,7 KB  2377 Ilość pobrań

np do głównego katalogu.
server
├── base.png
├── cache
├── cs.png
├── cs.ttf
├── digit.ttf
├── impact.ttf
├── index.php
├── key.png
├── lucon.ttf
├── ocr.ttf
├── SNS
│   ├── class_PQ.php
│   └── PQ
│       ├── gamespy.php
│       ├── halflife.php
│       ├── oldhalflife.php
│       ├── PQ_PARENT.php
│       └── quake3.php
└── steam.png

Nadajemy katalogowi cache prawa do zapisu i odczytu (chmod 777).

Standardowe ustawienia umożliwiają generowanie statusu dla IP podanego w parametrze $_GET['ip'] lub $_GET['ip'] i $_GET['port'].
Więc jeżeli mamy domenę amxx.pl i wypakowaliśmy pliki do głównego katalogu to dostęp do skryptu będziemy mieli poprzez kilka linków (mod_rewrite):

amxx.pl/server/index.php
amxx.pl/server/index.png
amxx.pl/server/index.jpg
amxx.pl/server/status.png
amxx.pl/server/status.jpg

i do nich doklejamy parametr ip (lub ip i port) tj.
?ip=IP_SERWERA:PORT
lub
?ip=IP_SERWERA&port=PORT_SERWERA
Czyli otrzymujemy przykładowo
amxx.pl/server/index.png?ip=127.0.0.1:27015

Jeżeli chcemy tworzyć status tylko jednego serwera to zamieniamy:
	if (strpos($_GET['ip'], ':'))
{
$ipp = explode(":", $_GET['ip']);
if (count($ipp)==2)
{
$conf_ip = $ipp[0];
$conf_port = $ipp[1];
}
} else {
$conf_ip = ($_GET['ip'])?$_GET['ip']:'localhost';
$conf_port = ($_GET['port'])?$_GET['port']:'27015';
}

na:
	$conf_ip = 'IP_SERWERA';
$conf_port = 'PORT_SERWERA';

I nie musimy już podawać parametru ?ip= w linkach.

Stan serwera jest cache'owany (zapisywany) na 30 sekund (standardowo - $cachetime) aby zapobiec częstemu łączeniu się z serwerem.
Jako baza służy nam grafika o rozmiarach 350x20px w formacie .png (standardowo - $ext) i nazwie base.png (standardowo - $base) znajdująca się w tym samym katalogu co index.php
Do wyboru jest kilka czcionek (tablica $fonts) w formacie TTF (załączone).

Dodatkowo wszystko mniej więcej opisane w pliku index.php.


Oczywiście wymagane są otwarte porty i odblokowana funkcja fsock_open do pobrania statusu serwera.


p.s.
nie jest to jakoś super zrobione, ale każdy może sobie dopracować i zrobić wg własnego uznania ;)
  • +
  • -
  • 32