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
 

Qunir - zdjęcie

Qunir

Rejestracja: 14.07.2009
Aktualnie: Nieaktywny
Poza forum Ostatnio: 17.06.2016 21:50
-----

#629146 EXP Mod error w logach

Napisane przez Rivit w 30.03.2014 11:30

Zamien to:

new name[31];
get_user_name(id,name,32);

Na to:

new name[33];
get_user_name(id, name, 32);

  • +
  • -
  • 1


#629112 EXP Mod error w logach

Napisane przez Rivit w 30.03.2014 09:06

w loadxp w pierwszych linijkach zmien rozmiar na 33 i w get_user name daj na 32
  • +
  • -
  • 1


#521659 xREDIRECT [UPDATE 09-02-2011]

Napisane przez SeeK w 04.03.2013 19:33

Zrobiłem poprawkę obecnej wersji. Działa po aktualizacji steam z lutego 2013.

Gdyby ktoś chciał, to tutaj można znaleźć poradnik jak usunąć ten błąd: http://amxx.pl/topic...o-aktualizacji/

Załączone pliki


  • +
  • -
  • 8


#548548 Foreach i Forrange implementacja pętli ułatwiających życie

Napisane przez DarkGL w 09.06.2013 02:38

http://darkgl.amxx.p...iajacych-zycie/
 
Często podczas prac nad pluginem w kodzie muszę „przeliterować” po elementach tablicy czy wszystkich graczach. Pisanie rozbudowanej pętli for jest meczące i nużące więc pomyślałem że foreach znane z php było by znacznym ułatwieniem.
 
http://php.net/manua...res.foreach.php
 
Najpierw opis samych funkcji ( które są tak naprawdę makrodefinicjami )
  • foreach – „przeliterowuje” po całej tablicy i przypisuje wartość aktulnie używanego elementu do zdefiniowanej zmiennej
    dwa parametry
    • 1 – tablica po której ma literować
    • 2 – nazwa zmiennej do której będzie zapisywany aktualny element
  • forrange2 – wylicza kolejne wartości liczbowe i przypisuje je do zmiennej. Inspirowalem się funkcją range w php i python
    dwa parametry ( liczba po nazwie określa ilość parametrów )
    • 1 – nazwa zmiennej do które będzie zapisywana aktualna wartość
    • 2 – górny indeks do którego nastąpi odliczanie, odliczanie startuje od 0 do właśnie tego parametru – 1 z krokiem inkrementacyjnym równym 1 np. 0 , 1 , 2 , 3
  • forrange3 – to samo co funkcja wyżej
    Trzy parametry
    • 1 – nazwa zmiennej
    • 2 – dolny indeks od którego zacznie się odliczanie
    • 3 – górny indeks tak jak parametr 2 w funkcji forrange2
      Przykład dla dolnego indeksu równego 3. 3 , 4 , 5 , 6
  • forrange4 – To samo co funkcje wyżej
    Cztery parametry
    • 1- nazwa zmiennej
    • 2- dolny indeks tak jak w forrange3
    • 3 – górny indeks tak jak w forrange3
    • 4- krok inkrementacji np. możemy ustawić go na 10 więc liczby bedą się zwiększac o 10 co każdy krok
      Przykład 0 , 10 , 20 , 30 , 40 , 50
Definicje które trzeba dodać do pluginu
 
 
#define foreach(%1,%2) for( new iCurrentElement = 0 , %2 = %1[ 0 ]; iCurrentElement < sizeof %1 ; iCurrentElement++ , %2 = iCurrentElement < sizeof %1 ? %1[ iCurrentElement ] : 0 )
#define forrange4(%1,%2,%3,%4) for( new %1 = %2; %1 < %3 ; %1 += %4 )        

#define forrange3(%1,%2,%3) for( new %1 = %2; %1 < %3 ; %1 += 1 )
    
#define forrange2(%1,%2) for( new %1 = 0; %1 < %2 ; %1 += 1 )
 
Przykład użycia
 
#include <amxmodx>
#include <amxmisc>

#define PLUGIN    "New Plugin"
#define AUTHOR    "DarkGL"
#define VERSION    "1.0"

#define foreach(%1,%2) for( new iCurrentElement = 0 , %2 = %1[ 0 ]; iCurrentElement < sizeof %1 ; iCurrentElement++ , %2 = iCurrentElement < sizeof %1 ? %1[ iCurrentElement ] : 0 )

#define forrange4(%1,%2,%3,%4) for( new %1 = %2; %1 < %3 ; %1 += %4 )        

#define forrange3(%1,%2,%3) for( new %1 = %2; %1 < %3 ; %1 += 1 )
    
#define forrange2(%1,%2) for( new %1 = 0; %1 < %2 ; %1 += 1 )
    
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    new testArray[] = { 1 , 2 , 3 , 4 };
    
    foreach( testArray , value ){
        log_amx( "each %d" , value );
    }
    
    log_amx( "Range 1" );
    
    forrange2( value , 5 ){
        log_amx( "range1 %d" , value );
    }
    
    log_amx( "Range 2" );
    
    forrange3( value , 1 , 5 ){
        log_amx( "range2 %d" , value );
    }
    
    log_amx( "Range 3" );
    
    forrange4( value , 0 , 100 , 10 ){
        log_amx( "range3 %d" , value );
    }
}
 
Zwracane wartości
 
[testFor.amxx] each 1
[testFor.amxx] each 2
[testFor.amxx] each 3
[testFor.amxx] each 4
[testFor.amxx] Range 1
[testFor.amxx] range1 0
[testFor.amxx] range1 1
[testFor.amxx] range1 2
[testFor.amxx] range1 3
[testFor.amxx] range1 4
[testFor.amxx] Range 2
[testFor.amxx] range2 1
[testFor.amxx] range2 2
[testFor.amxx] range2 3
[testFor.amxx] range2 4
[testFor.amxx] Range 3
[testFor.amxx] range3 0
[testFor.amxx] range3 10
[testFor.amxx] range3 20
[testFor.amxx] range3 30
[testFor.amxx] range3 40
[testFor.amxx] range3 50
[testFor.amxx] range3 60
[testFor.amxx] range3 70
[testFor.amxx] range3 80
[testFor.amxx] range3 90
 
Jak widać funkcje znacznie ułatwiają przeglądanie tablic po za tym kod wygląda lepiej.
na wstępie mówiłem o

po elementach tablicy czy wszystkich graczach

jak widać najlepiej zastosowac tu funkcje forrange3
 
 
forrange( currentPlayerID , 1 , 33 )
( zamiast stałej 33 można też wstawić pobieranie ilości slotów )
  • +
  • -
  • 17