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
Nowy Plugin

plugin do odczytywania strony www

Nowy Plugin

  • Zamknięty Temat jest zamknięty
9 odpowiedzi w tym temacie

#1 pdr

    Pomocny

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:57
Offline

Napisano 21.03.2010 13:16

Witam, chciałem napisać mały plugin który będzie odczytywał zawartość strony www (zawartością tej strony jest poprostu "1"), ale coś mi nie wychodzi

public www_check(id)
{
 new socket,error;
 new link[] = "azereus.pl/azer_ffa.php";
 socket = socket_open(link, 80, SOCKET_TCP, error)

 new sBuffer[512]
 socket_close(socket);  
 client_print(0, print_chat,"[link %s]",link[0]);

 socket = socket_open("azereus.pl/azer_ffa.php", 80, SOCKET_TCP, error)
 if (socket > 0)
 {
  socket_send(socket, sBuffer, 511)
  socket_recv(socket, sBuffer, 511)
 client_print(0, print_chat,"[Jest OK]");
 }
 else
 {
  switch (error)
  {
  case 1: { server_print("Error creating socket"); }
  case 2: { server_print("Error resolving remote hostname"); }
  case 3: { server_print("Error connecting socket"); }
  }
  client_print(0, print_chat,"[BLAD %d]",error);

  return PLUGIN_CONTINUE
 }
}
Dostaje kod błędu "2". Bawił się ktoś socketami? :)
  • +
  • -
  • 0

#2 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 21.03.2010 14:24

pdr radze najpierw opanować zasadę działanie socketa w innym jezyku (np. C).

"azereus.pl/azer_ffa.php" to nie jest HOST, to jest host wraz z plikiem docelowym. Połączenie robisz do hosta, a następnie wysyłasz zapytanie z prośbą o wysłanie danych danego pliku.

Po użyciu google masz przykładowe zapytanie:
GET /index.html HTTP/1.0\n\n

Może ktoś napisze coś więcej ;)
  • +
  • -
  • 0

#3 pdr

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:57
Offline

Napisano 22.03.2010 11:56

Myślałem że to jest trochę prostsze :)
No nic poczytam jak to jest np. w C,
ale i tak będę wdzięczny jeżeli ktoś mi pomoże z tym problemem :)

22 marzec 2010 - 11:56:
Może żeby zaoszczędzić mój czas.
Mogę zapłacić za napisanie takiego kodu który odczytuje zawartość strony którą wyżej opisałem.
Jeżeli ktoś był by zainteresowany, proszę o kontakt na gadu: 7162068
  • +
  • -
  • 0

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 22.03.2010 19:17

Kod jest przykładowym użyciem funkcji getWebContent() i jest w bardzo złym stylu, ale dobrze obrazuje to co się dzieje. Normalny kod powinien pobierać zawartość strony raz na mapę lub co ileś sekund, a nie na każde użycie komendy.

#include <amxmodx>
#include <amxmisc>
#include <sockets>

#define PLUGIN "Socket GetContent"
#define VERSION "1.0"
#define AUTHOR "R3X"

new gszBuffer[512];
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)

	register_clcmd("say /sock","cmdSocket");
}
public cmdSocket(id){
	if(getWebContent("azereus.pl", "azer_ffa.php", gszBuffer, charsmax(gszBuffer))){
		client_print(id, print_chat, "Przyszlo info: %s", gszBuffer);
	}
}
public getWebContent(const szHost[], const szFile[], szOutPut[], iLen)
{
	 new socket,error;
	 socket = socket_open(szHost, 80, SOCKET_TCP, error);
	 if (socket > 0)
	 {
	 	formatex(gszBuffer, 511, "GET /%s^n^n", szFile);
		socket_send(socket, gszBuffer, iLen)
	
		socket_recv(socket, szOutPut, iLen);

		//client_print(0, print_chat,"[Jest OK]");
		socket_close(socket);
		return 1;
	 }else{
	 	switch (error)
		{
			case 1: { server_print("Error creating socket"); }
			case 2: { server_print("Error resolving remote hostname"); }
			case 3: { server_print("Error connecting socket"); }
		}
		log_amx("[BLAD %d]",error);
	 }
	 return 0;
}


  • +
  • -
  • 1

#5 pdr

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:57
Offline

Napisano 27.03.2010 14:37

Podziałało doskonale, dzięki.

Mam tylko jeszcze jeden problem z tym związany

new ip[25]
 new adres[100] = "check.php?ip="
  get_user_ip ( id, ip, 25,1)

  new fulladres[100]
  fulladres=add(adres,sizeof(adres),ip,sizeof(ip))
  getWebContent("azereus.pl",fulladres, gsz, charsmax(gsz))  

Muszę w getWebContent jako adres strony dać stronę razem z parametrem, którym jest IP gracza, ale nie działa mi to.
Generalnie nie wiem jak połączyć ze sobą dwa stringi, a funkcja add nie działa.
  • +
  • -
  • 0

#6 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 28.03.2010 11:07

Nieoficjalny polski support AMX Mod X -> Dokumentacja :: AMXX

new ip[25]
new adres[100] = "check.php?ip="
get_user_ip ( id, ip, 25,1)

add(adres,sizeof(adres),ip,sizeof(ip))
getWebContent("azereus.pl",adres, gsz, charsmax(gsz))

  • +
  • -
  • 1

#7 pdr

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:57
Offline

Napisano 28.03.2010 23:42

Działa super, dzięki.

Po drodze pojawiły mi się jeszcze 2 małe drobiazgi.

1. Jak AMX może wykryć czy gracz jest botem (komputerowym graczem)?

2. co zrobić żeby przed wywaleniem gracza z serwera, dostał komunikat w konsoli o powodzie jego wyrzucenia?
Próbowałem poniższy kod, ale po kicku, graczowi nie zostaje w konsoli żaden napis
client_print(id, print_chat,"Nie byłeś zaproszony do tej gry");
     client_cmd(id,"disconnect");

  • +
  • -
  • 0

#8 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 29.03.2010 07:34

client_print(id, print_console,"Nie byłeś zaproszony do tej gry");
     client_cmd(id,"disconnect");


is_user_bot(id)

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

#9 pdr

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:57
Offline

Napisano 29.03.2010 17:36

Wszystko działa.
Dzięki.
  • +
  • -
  • 0

#10 Adminek AMXX.PL

    Admin :)

  • Bot

Reputacja: 156
Profesjonalista

  • Postów:7 490
  • Lokalizacja:AMXX.PL
Offline

Napisano 29.03.2010 17:56

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Wszystko działa.

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL





Również z jednym lub większą ilością słów kluczowych: Nowy Plugin

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

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