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
 

V3ko - zdjęcie

V3ko

Rejestracja: 31.07.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 22.12.2013 08:00
*****

#593640 [ROZWIĄZANE] Zmienne typu tekstowego w natywie.

Napisane przez Droso w 15.12.2013 16:21

Przykład z codmoda:

public PobierzNazwePerku(perk, Return[], len)
{
	if(perk <= ilosc_perkow)
	{
		param_convert(2);  // Return[] to drugi parametr
		copy(Return, len, nazwy_perkow[perk]); // kopiujemy do Returna nazwe perku
	}
}

  • +
  • -
  • 1


#417979 [ROZWIĄZANE COD NOWY] Co odpowiada funkcji Give_Xp z diablo w codzie?

Napisane przez sebul w 05.06.2012 13:44

jak sama nazwa nazwa wskazuje daje expa. (do tego co teraz masz)

Ale o co chodzi?

Czyli

cod_set_user_xp
mogę wykorzystać w sposób taki jak Give_Xp że pobiorę ilość aktualnego expa i odejme od niego po wywołaniu jakiegoś zdarzenia?

Po prostu jak chcesz dodać komuś exp, to robisz to tak
cod_set_user_xp(id, cod_get_user_xp(id)+ILOSC_EXPA);

  • +
  • -
  • 1


#417951 [ROZWIĄZANE COD NOWY] Co odpowiada funkcji Give_Xp z diablo w codzie?

Napisane przez sebul w 05.06.2012 11:07

http://amxx.pl/dokumentacja/f319/cod-set-user-xp

Nie do końca, bo to ustawia xp, a nie dodaje. W codzie normalnie nie ma funkcji, która robi to samo co "Give_Xp" w diablo.
  • +
  • -
  • 1


#417950 [ROZWIĄZANE COD NOWY] Co odpowiada funkcji Give_Xp z diablo w codzie?

Napisane przez Goliath w 05.06.2012 11:05

http://amxx.pl/dokum...cod-set-user-xp
  • +
  • -
  • 1


#340773 Amxx Bansystem

Napisane przez QuahodronN w 28.12.2011 01:14

ja rozumiem ale mam swoja siec, a amxbans tak mi sie sypie ze to jest masakra dlatego sie nie cierpliwie juz
  • +
  • -
  • -1


#351329 Achievements

Napisane przez Fili:P w 19.01.2012 12:44

Dołączona grafika
Cześć, zaprezentuje wam system achievementów, niestety jedynie z zapisem nvault, ponieważ sql-a jeszcze nie zrozumiałem. Jeśli jest ktoś chętny to może pomóc w zapisie sql. Starałem się napisać ten plugin jak najbardziej optymalnie. W przyszłych wersjach postaram się dodać natywy i być może forwardy, aby każdy achievement był w oddzielnym pliku lub, aby wszystkie achievenemty były w jednym oddzielnym pliku.

Dołączona grafika
Standardowa.
Dołączona grafika
Nvault,
HamSandwich,
Colorchat.
Dołączona grafika
say /ach
say_team /ach

Wyświetla menu ze statusem achievementów, po wyborze itemu w menu pojawia się jego opis i obecny stan.

Dołączona grafika
ach_display_gz 0/1 - standardowo 1, jeśli 0 to po zdobyciu acha nie wyświetla "Gratulacje %s! Zdobyłeś osiągnięcie %s!", jest stworzone, ponieważ forwardem możemy robić to sami ( forward nie testowany ).

Dołączona grafika
W obecnej wersji nie ma cvarów, bo nie widziałem takiej konieczności. Pierwszy raz pracował z tak dużą ilością (jak na mnie) zdarzeń silnika gry. Możliwe że zamiast używać Fakemety HamSandiwch i CSX wystarczyło użyć samej kanapki, lecz jeśli tak to w przyszłej wersji. Póki co mamy do dyspozycji 11 osiągnięć oczywiście dodam więcej. Dodawanie achievementów jest o tyle fajne, iż nawet na nvault nie jest wymagane resetowanie zapisu ani edytowanie go co dodanie osiągnięcia. Sprawdzenie czy osiągniecie jest zaliczone występuję jedynie w HamSpawn. Mam nadzieję, że spodoba wam się mój plugin. Proszę pisać komentarze przede wszystkim z uzasadnieniem.

Dołączona grafika
native ach_get_index(const name[]);
native ach_get_stance(id, ach_id); // pobiera czy gracz zaliczył acha czy nie 0/1
native ach_get_status(id, ach_id); // pobiera postęp w achu
native ach_get_name(ach_id, const var[], len); // pobiera nazwe acha
native ach_get_desc(ach_id, const var[], len); // pobiera opis acha
native ach_get_target(ach_id); // pobiera cel acha (wymagany postep)
native ach_get_max(); // pobiera ilosc stworzonych achow
native ach_set_stance(id, ach_id, value); // ustawia stan acha
native ach_set_status(id, ach_id, value); // ustawia postep w acha
native ach_add(const ach_name[], const ach_desc[], ach_target);
native ach_reset_status(id, ach_id); // resetuje postep acha (ustawia na 0) przydatne jezeli robimy achy typu w rundzie
native ach_add_status(id, ach_id, value); // dodaje x punktów do obecnej wartosci postepu acha

Dołączona grafika
forward ach_give_reward(pid, aid); // wywolywany kiedy gracz otrzymuje info o ukończeniu acha ( możemy mu tu dać nagrode ).
forward ach_load_post( id ); // wywolywany po wczytaniu danych, aby bezpiecznie operowac w client_authorized :)
forward ach_save_pre( id, save_in ); // wywoływany przed zapisem danych, dobrze jest tu zmienić na przykład wartość postępu, aby nie kolidować z systemem
forward ach_save_post( id, save_in ); // wywolywany po zapisie danych.

save_in może mieć 2 wartości:

#define SAVE_IN_DISCONNECT 1
#define SAVE_IN_DEATH 2

Wartość 1 jest wywoływana przy wyjściu z serweru, a 2 przy śmierci gracza. Oczywiście przy wyjściu z serwera nie wywołuje się ach_save_post, bo to nie miałoby sensu.

Oświadczam wam, że pracuje teraz nad nową wersją.
Dołączona grafika
  • 1.0.0
Podstawowa wersja.
  • 1.0.0b łatka i dodanie kilku achów
Dodana łatka
Dodanie kilku achów
  • 1.0.1
Dodanie 4 natywów
Możliwość dostawania w nagrodę za ukończenie acha xp-a w nowym cod modzie
Łatka [dzięki torrent]
  • 1.0.1b
Wymagany moduł engine
Naprawa acha "Żywy lampion"
Naprawa acha "Pan śmierci"
Nowy cvar
Forward wywoływany podczas otrzymania acha ( nie testowany )
  • 1.0.1c
Łatka zapisu
  • 1.0.2
Dodanie natywów
Dodanie forwardu
  • 1.1.0
Użycie tablic dynamicznych (dzięki DarkGL i Muzzi za pomoc przy tablicach)
Dodanie natywów
Usunięcie achów, ponieważ możemy je tworzyć sami jak klasy do coda
  • 1.1.1
Optymalizacja.
Dodanie 3 nowych forwardów.
Usunięcie kilku zbędnych natywów.
Dołączona grafika
Przykładowy kod z użyciem forwardu:

#include <amxmodx>
#include <achievements>

public plugin_init() {
register_plugin("test", "1.0", "Fili:P")
}
public ach_give_reward(pid, aid)
{
client_print(pid, print_chat, "Zaliczyles acha!");
}

Przykładowy kod tworzący acha w oddzielnym pluginie:

#include <amxmodx>
#include <achievements>
new g_HandleAch;
public plugin_init() {
register_plugin("achy", "1.0", "Fili:P")
g_HandleAch = ach_add("Staly bywalec", "Wejdz 1000 razy na serwer", 1000);
}
public client_putinserver(id)
{
ach_add_status(id, g_HandleAch, 1);
}


Radze opozniac taskiem funkcje, ktore bd w chwili wejscia na serwer

Projekt nie będzie już rozwijany, chyba że zrozumiem sqlx. Mogą występować błędy kiedy usuwamy achy.

Zakazuje kopiowania treści na inne witryny bez mojej zgody!
Dołączona grafika
Wersja 1.1.0:
Załączony plik  achievements.sma   9,82 KB  501 Ilość pobrań
  achievements.amxx
Załączony plik  achievements.inc   804 bajtów  437 Ilość pobrań


Wersja 1.1.1:
Załączony plik  achievements.inc   1,02 KB  552 Ilość pobrań

Załączony plik  achievements.sma   8,69 KB  629 Ilość pobrań
  achievements.amxx
  • +
  • -
  • 28


#346615 Jak instalować pluginy? (SourceMod)

Napisane przez Siemka (= w 08.01.2012 16:25

.sma dajesz do scripting a .amx do plugins...
  • +
  • -
  • 0


#337119 [ROZWIĄZANE] Tylko nóż

Napisane przez Kolar`. w 20.12.2011 17:35

init:

register_event("CurWeapon","CurWeapon","be", "1=1")
dół:
public CurWeapon(id)
{	
	new weapon=get_user_weapon(id)

	if(weapon != CSW_KNIFE || weapon != CSW_C4) client_cmd(id,"drop");
}


Też można ale to będzie mu wyrzucać bronie które tam podałeś (knife i c4) a tak to może w ogóle mu nie dawać.


#327483 [ROZWIĄZANE] Poszukuję klucza francuskiego albo cos na ksztalt

Napisane przez VirusX w 27.11.2011 19:54

Naucz się polskiego a pod modele zdobędziesz używając program Half-Life Model Viewer ale z głową.


A więc, Panie Filolog, pragnę zapewnić, iż język ojczysty opanowałem w stopniu wystarczającym już za czasów, kiedy Ty srałeś jeszcze w pieluchy.
W dodatku ciężko jest mi przejść obojętnie obok Twojej rady, która świadczy o tym, iż jesteś ignorantem albo kompletnym idiotą lub też, co bardziej prawdopodobne, niedouczonym smarkiem.
HLMV służy co najwyżej do wyświetlania modeli i ich drobnej edycji.

Brnąc przez zawiłość jaką wprowadzasz w swoim krótkim acz kretyńskim poście chciałbym również wytknąć Ci parę uchybień.

Nie mam bladego pojęcia czym są pod modele, wszak jest to na gruncie lingwistyki inne słowo aniżeli 'podele', którego ja całkowicie przypadkowo użyłem.
używając programU - tak powinien brzmieć zwrot - odmiana przez przypadki też Ci najwyraźniej nie idzie
użyć programu HLMV z głową - dziękuję ze ostrzeżenie, gdyby nie ta pomocna informacja spaliłbym sobie komputer albo kto wie - może odpalił jakąś głowicę nuklearną. Od teraz będę go używał z głową i pełną rozwagą. Jakkolwiek, pomimo najszczerszych chęci zdarzyło mi się już wysadzić dzięki temu programowi piekarnik sąsiadów i zbytnio podgrzać wodę w prysznicu. Mea culpa...

Abstrahując od przypadku napinacza, którego reprezentujesz, po raz kolejny nasuwa mi się pytanie - gdzie się podziała cholerna życzliwość i czy pokolenie internetowe jest już zupełnie zwolnione z jakiejkolwiek etykiety?

Nie pozdrawiam.
  • +
  • -
  • 56


#273013 Funkcje nowych statystyk

Napisane przez KariiO w 23.07.2011 17:29

Dodatek zawiera funkcję poszczególnych statystyk (w pod temacie wymienione). Są moje więc oczywiście nie zdziwię się jeżeli ktoś inny da krótsze lub po prostu bardziej optymalne :)

Regeneracja HP - co x sekund dostajesz (punkty tej statystyki/y = HP)
Spoiler


EXP
Spoiler


Grawitacja
Spoiler


Niewidzialność
Spoiler


Wszelkie błędy/niedogodności proszę zgłaszać w temacie.
Tego dodatku zabrania się kopiowania na inne fora itp. bez zgody autora.

  • +
  • -
  • 13


#163670 Dynamiczny HUD

Napisane przez R3X w 24.08.2010 22:55

Dynamiczny HUD
dHUD.inc
v.1.03

Temat w budowie, stworzenie dokumentacji potrwa pewnie dłużej niż pisanie kodu :P
Tymczasem angielski opis wszystkich funkcji można znaleźć w pliku .inc

Dołączona grafikaDemonstracja

Eksperymentalna biblioteka do tworzenia różnych efektów na wiadomościach HUD. Jej głównym (lecz nie jedynym) zadaniem jest zautomatyzowanie ruchu i zmian koloru wyświetlanych komunikatów.



Plugin udostępnia szereg funkcji do pracy z efektami. Podstawowe operacje odbywają się na pojedynczych klatkach animacji, jak we flashu. Tak też wyświetlana jest wiadomość - klatka po klatce - zastąpienie napisu jego kopią w innym miejscu czy kolorze stworzy wrażenie ruchu i przekształceń kolorystycznych.

Download



Instalacja
Plik dHUD.sma należy skompilować i zainstalować na serwerze. Plugin korzystający z efektów skompiluje się wyłącznie lokalnie z dostępem do dHUD.inc.


Interfejs

Wszystkie udostępniane funkcje mają prefiks DHUD_*.

Pierwsze co trzeba zrobić to stworzyć 'obiekt' dhud. DHUD_create() zwraca uchwyt, którego używa się z pozostałymi funkcjami. Można utworzyć kopię istniejącego obiektu przez podanie jego uchwytu DHUD_create(dhud) [działa to podobnie jak konstruktor kopiujący w językach obiektowych].


Animację możemy zaprojektować manualnie przypisując właściwości każdej klatce z osobna (dHUD_test -> dhud) lub użyć filtrów (dHUD_test -> dhud3).

  • klatka po klatce
Wystarczy kilka wywołań DHUD_setFrame, każde przypisze kolor i położenie napisu tworząc animację

DHUD_setFrame(dhud, frame, iColor[3], Float:x, Float:y, iLen = 1);
dhud - uchwyt
frame - numer klatki, zaczynają się od 0, w przypadku numeru większego niż liczba dostępnych akurat klatek animacja zostaje wypełniona pustymi klatkami aż do podanego rozmiaru
iColor[3] - kolor napisu
x, y, - położenie napisu
iLen - długość klatki; w miejsce dwóch identycznych klatek z iLen=1 można dać jedną z iLen=2




  • filtry

Filtry służą do przetwarzania kilku klatek zgodnie z danym algorytmem.

DHUD_applyFilter(dhud, const szFilter[], startFrame, endFrame, Float:dx=D_LONG, Float:dy=D_ZERO, any:...)
dhud - uchwyt
szFilter[] - nazwa filtra, lista dostępnych jest drukowana po użyciu komendy "dhud info" przez admina z flagą od konfiguracji (H)
startFrame, endFrame - przedział klatek
dx, dy - przyrost wartości x i y, przydatne w funkcjach, funkcja realizująca filtr otrzymuje współrzędne x i y, z których może wyliczyć nowe położenie (przykład z sinusem w dHUD_test), każda ramka dostaje wartości x<poprzedniej ramki> + dx i y<poprzedniej ramki> + dy
any:.. dodatkowe parametry filtrów, opisane także w "dhud info"



Dwoma podstawowymi filtrami dHUD są SetPosition i SetColor. Dzięki nim, możemy ustawić kolor i położenie w wielu klatkach jednocześnie.

SetPosition ustawia podaną pozycję wszystkim klatkom z zakresu startFrame-endFrame
SetColor ustawia podany kolor wszystkim klatkom z zakresu startFrame-endFrame

Ten kod ustawi dhud długości 50 klatek w pozycji 0.5 0.5 w kolorze białym (255, 255, 255)
DHUD_setFrame(dhud, 50, {0,0,0}, 0.0, 0.0);
DHUD_applyFilter(dhud, "SetPosition", 0, 50, D_ZERO, D_ZERO, 0.5, 0.5);
DHUD_applyFilter(dhud, "SetColor", 0, 50, D_ZERO, D_ZERO, 255, 255, 255);



Jak już zbudujemy animację nadejdzie mement na wyświetlenie jej graczowi:
DHUD_display(id, dhud, Float:fInterval = 0.1, channel = 4, const szMessage[], any:...)
id - id gracza lub 0 - do wszystkich
dhud - uchwyt
fInterval - długość trwania klatki w sekundach; czas od pokazania pewnej ramki do następnej mnożony przez wartość iLen klatki
channel - kanał HUD, 1-4
szMessage[], ... - wiadomość; można użyć ciągów formatujących; %L + LANG_PLAYER z id = 0 niestety nie zadziała! może w przyszłym wydaniu


Forward
W momencie zakończenia animacji wykonywany jest forward
forward fwStopAnimation(id, dhud, bool:finished);

czyli w pluginie można dopisać publiczną funkcję, która zareaguje na to zdarzenie
public fwStopAnimation(id, dhud, bool:finished){}

parametr finished jest ustawiany na true, kiedy animacja zostanie zakończona zgodnie z planem i false jeśli zostanie zatrzymana/zastąpiona nową


Historia

1.03
- poprawione: rejestrowanie filtrów z parametrami w zewnętrznych pluginach

1.02
- poprawione: pierwsza ramka wyświetlana bez opóźnienia
- poprawione: forward wykonywany dokładnie w momencie końca animacji (a nie po puszczeniu ostatniej klatki)
- dodane: ustawienie iLen na 0 usuwa klatkę z animacji
- dodane: stock DHUD_removeFrames
- dodane: stock DHUD_removeAllFrames

1.01
- poprawa interfejsu
- dodane: czyszczenie nieużywanych tablic Array:
- dodane: forward onStopAnimation
- dodane: komenda "dhud info"

1.0
- pierwsza, nie publikowana szerzej wersja
  • +
  • -
  • 37


#257110 Dodanie expa do aktualnego levela jak zrobic ?

Napisane przez diablix w 09.06.2011 11:47

Do aktualnego expa dodajesz tak

cod_set_user_xp(id, cod_get_user_xp(id) + 8000);

  • +
  • -
  • 1


#256173 Przerobienie pluginu na przenoszenie expa

Napisane przez Knopers w 05.06.2011 14:15

#include <amxmodx>
#include <codmod>

#define FLAGA ADMIN_USER

public plugin_init()
{
register_plugin("Przenoszenie EXPa", "1.0", "Orginal version: byQQ, Edit version: kisiel96");
//Total Edited By Knopers

register_concmd("cod_przenies", "handle_przenies");
register_concmd("cod_zamien", "handle_zamien");
register_concmd("cod_sumuj", "handle_sumuj");
register_clcmd("lista_klas", "lista_klas");
}

public handle_przenies(id)
{
if(get_user_flags(id) & FLAGA)
{
new arg[2][11];
new ids[2];

read_argv(1, arg[0], 10); // ID 1
read_argv(2, arg[1], 10); // ID 2


ids[0] = str_to_num(arg[0]);
ids[1] = str_to_num(arg[1]);

new klasa[2][33];

cod_get_class_name(ids[0], klasa[0], 32);
cod_get_class_name(ids[1], klasa[1], 32);

cod_set_user_class(id, ids[0], 1);
new temp = cod_get_user_xp(id);
cod_set_user_xp(id, 0);
cod_set_user_class(id, ids[1], 1);
cod_set_user_xp(id, temp);

client_print(id, print_chat, "Przeniosles exp z %s na %s", klasa[0], klasa[1]);
}
return PLUGIN_CONTINUE;

}

public handle_zamien(id)
{
if(get_user_flags(id) & ADMIN_USER)
{
new arg[2][11];
new ids[2];

read_argv(1, arg[0], 10); // ID 1
read_argv(2, arg[1], 10); // ID 2

ids[0] = str_to_num(arg[0]);
ids[1] = str_to_num(arg[1]);

new klasa[2][33];

cod_get_class_name(ids[0], klasa[0], 32);
cod_get_class_name(ids[1], klasa[1], 32);

cod_set_user_class(id, ids[0], 1);
new temp1 = cod_get_user_xp(id);
cod_set_user_class(id, ids[1], 1);
new temp2 = cod_get_user_xp(id);
cod_set_user_xp(id, temp1);
cod_set_user_class(id, ids[0], 1);
cod_set_user_xp(id, temp2);

client_print(id, print_chat, "Zamieniles exp pomiedzy %s a %s", klasa[0], klasa[1]);
}
return PLUGIN_CONTINUE;

}

public handle_sumuj(id)
{
if(get_user_flags(id) & FLAGA)
{
new arg[2][11];
new ids[2];

read_argv(1, arg[0], 10); // ID 1
read_argv(2, arg[1], 10); // ID 2

ids[0] = str_to_num(arg[0]);
ids[1] = str_to_num(arg[1]);

new klasa[2][33];

cod_get_class_name(ids[0], klasa[0], 32);
cod_get_class_name(ids[1], klasa[1], 32);

cod_set_user_class(id, ids[0], 1);
new temp1 = cod_get_user_xp(id);
cod_set_user_xp(id, 0);
cod_set_user_class(id, ids[1], 1);
new temp2 = cod_get_user_xp(id);
cod_set_user_xp(id, temp1+temp2);

client_print(id, print_chat, "Zsumowales exp z %s i %s", klasa[0], klasa[1]);
}
return PLUGIN_CONTINUE;

}

public lista_klas(id)
{
client_print(id, print_console, "===============================================");

for(new i = 0; i < cod_get_perks_num(); i++)
{
new klasa[33]; cod_get_class_name(i, klasa, 32);
client_print(id, print_console, "ID: %d | Nazwa: %s", i, klasa);
}

client_print(id, print_console, "===============================================");
}

Powinno działać, jak coś będzie nie tak to pisz bo nie miałem inc żeby przekomilować. Czyli poprawiane na oko :P
  • +
  • -
  • 1


#71277 Konwersja nVault -> MySQL

Napisane przez Portek w 07.07.2009 14:37

Szeroko zakrojone pojęcie spamu dosięgło mojego GG i PW, więc postanowiłem opisać sposób konwersji vNault -> MySQL. Konwersja jest szczególnie ważna przy wszelkiego typu modach, które oferują dwa rodzaje zapisu, a my z nieznanego powodu wybraliśmy akurat vNault.

I. Wstęp
Poziom trudności: średni+
Wymagane programy
- Mozilla Firefox - http://www.mozilla-e...org/pl/firefox/
- Wtyczka SQLite Manager - https://addons.mozil...efox/addon/5817
- Jakiś edytor tekstu, ja działałem na Notepad++ który polecam - http://notepad-plus....net/uk/site.htm

Konwersja w poradniku zostanie opisana na pliku vNault z serwera z modem War3FT, choć wszędzie wygląda ona podobnie.

II. Wyciąganie bazy z zakodowanego pliku
Każdy kto próbował wyedytować plik vNault w zwykłym edytorze tekstu wie iż nie zobaczy nic prócz całej masy krzaczków:
Dołączona grafika

Plik ten jest tworzony przy wykorzystaniu SQLite 3, system ten zabezpiecza plik przed wścibskimi to raz, a dwa znacznie ogranicza jego wagę, dla przykładu plik vNault warzący 0,5mb, w wersji MySQL może osiągnąć nawet 1,5mb. Jednym z powodów takiej różnicy jest usunięcie wszystkich tabel które są zupełnie zbędne jeśli chodzi o zapis do pliku.

Żeby zobaczyć odpowiedni kod należy posłużyć się kilkoma sztuczkami, instalujemy program MozillaFirefox, a następnie doinstalowujemy wtyczkę SQLite Manager. Następnie wchodzimy odpowiednio w zakładkę Narzędzia i otwieramy okno wtyczki:
Dołączona grafika

Naszym oczom ukarze się okno programu w którym od tej pory będziemy pracować, wskazujemy plik z bazą danych którą chcemy wyedytować:
Dołączona grafika

Po otworzeniu ukarze się nam struktura pliku i prawie idealna składnia zapytań które musimy wydać, wybieramy z menu po lewej stronie którąś z tabel, ja jako przykład wybiorę wc3_player
Dołączona grafika

Jak widać na screenie program daje nam możliwość bezpośredniej edycji rekordów, usuwanie obecnych, edycji, czy dodania nowych, nas jednak interesuje przycisk Export
Wybieramy odpowiednio zakładkę SQL -> Zaznaczamy obie dostępne opcje -> Klikamy przycisk OK.
Dołączona grafika
Ukarze nam się okno w którym wybieramy gdzie ma być wgrana już prawie gotowa kopia bazy danych (dlaczego prawie, o tym potem), żeby było prosto i żebyśmy nie musieli szukać wybieramy Pulpit i klikamy Zapisz.

III. Poprawa zapytań
Odnajdujemy zapisany plik i otwieramy go w dowolnym edytorze tekstu (w przykładzie użyłem Notepad++
Dołączona grafika
Widzimy już rozkodowaną składnie MySQL, 90% prac już za nami, jednak żeby poprawnie wgrać taką baze należy ją edytować, zapytanie niestety są źle wydane, stąd błąd który będzie pojawiał się przy imporcie w PhpMyAdminie.

Zacznijmy od zapytania które odpowiada za usunięcie tabeli (jeśli istnieje) i utworzenie nowej.
DROP TABLE IF EXISTS "wc3_player";
CREATE TABLE `wc3_player` ( `player_id` INTEGER PRIMARY KEY AUTOINCREMENT, `player_steamid` varchar(25) NOT NULL default '', `player_ip` varchar(20) NOT NULL default '', `player_name` varchar(35) NOT NULL default '', `time` timestamp(14) NOT NULL DEFAULT CURRENT_TIMESTAMP );

Bardziej doświadczeni użytkownicy i Ci którzy mieli styczność z bazami danych na pierwszy rzut oka zauważą błędy w składni, jednak żeby nie było masy pytań "co jest nie tak" zaznaczę błędne elementy

DROP TABLE IF EXISTS "wc3_player";

W tej lini wystarczy usunąć znaki ", tak aby zapytanie wyglądało następująco:

DROP TABLE IF EXISTS wc3_player;


W kolejnej lini:

CREATE TABLE `wc3_player` ( `player_id` INTEGER PRIMARY KEY AUTOINCREMENT, `player_steamid` varchar(25) NOT NULL default '', `player_ip` varchar(20) NOT NULL default '', `player_name` varchar(35) NOT NULL default '', `time` timestamp(14) NOT NULL DEFAULT CURRENT_TIMESTAMP );

Na zielono zaznaczony jest błąd składni, zaznaczony tekst należy zamienić na auto_increment
Zaznaczone na czerwono zapytania należy usunąć, bowiem parametr default trzeba czymś zapełnić, w naszym przypadku jest to zbędne. Poprawne zapytanie wygląda tak:
CREATE TABLE `wc3_player` ( `player_id` INTEGER PRIMARY KEY auto_increment, `player_steamid` varchar(25) NOT NULL, `player_ip` varchar(20) NOT NULL, `player_name` varchar(35) NOT NULL, `time` timestamp(14) NOT NULL DEFAULT CURRENT_TIMESTAMP );

Myślę że większego problemu z edycją kodu w/w zapytań nie będzie, więcej zabawy może być z edycją zapytań rekordów. Niestety wyeksportowane rekordy są źle sformułowane, brakuje w nich odpowiednio zdefiniowanych pól, stąd błąd przy imporcie. Podstawową kwestią jest wyciągnięcie z zapytania tworzącego tabele nazw pól, które musimy osadzić w zapytaniu. Na przykładzie zaznaczyłem pola na kolor zielony:

CREATE TABLE `wc3_player` ( `player_id` INTEGER PRIMARY KEY auto_increment, `player_steamid` varchar(25) NOT NULL, `player_ip` varchar(20) NOT NULL, `player_name` varchar(35) NOT NULL, `time` timestamp(14) NOT NULL DEFAULT CURRENT_TIMESTAMP );


Skoro mamy już nazwy tabel zajmijmy się edycja rekordów, świeżo rozkodowana baza wygląda mniej więcej tak:
INSERT INTO "wc3_player" VALUES(1,'','','Portek',07.07.2009);
Brakuje w niej tak jak pisałem wcześniej zdefiniowanych pól do których maja być dodane dane, poprawiamy więc odpowiednio kod:

INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`)VALUES(1,'','','Portek',07.07.2009);

Na pierwszy rzut oka widać co zostało dodane, "wc3_player" zostało zamienione na 'wc3_player', oraz dodane zostały nazwy pól (UWAGA! Ważne żeby nazwy pól były podawane między znakami 'a', oraz było w dokładnie takiej samej kolejności jak w zapytanie tworzącym tabele!).
Nie pozostało nam nic innego jak edycja wszystkich zapytań, ręczna edycja wszystkiego mija się z celem, komu chciało by się to wszystko wstawiać, posłużymy się więc opcją "Zamień". Edytujemy odpowiednio pierwszą linijkę, zaznaczamy stary kod który musimy zamienić, naciskamy klawisze CTRL+H, w pierwszym polu powinien pojawić się stary kod, następnie klikamy na pole poniżej, oraz zaznaczamy wyedytowaną i poprawna już część kodu, ukarze się ona w polu poniżej. Nie pozostaje już nic innego jak kliknąć przycisk Zamień wszystkie
Dołączona grafika

Wyedytowany cały kod, który można poprawnie i bez problemów importować do bazy danych wygląda tak:
DROP TABLE IF EXISTS wc3_player;
CREATE TABLE `wc3_player` ( `player_id` INTEGER PRIMARY KEY auto_increment, `player_steamid` varchar(25) NOT NULL, `player_ip` varchar(20) NOT NULL, `player_name` varchar(35) NOT NULL, `time` timestamp(14) NOT NULL DEFAULT CURRENT_TIMESTAMP );
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`)VALUES(1,'','','Portek',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(2,'','','Portek2',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(3,'','','Portek3',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(4,'','','Portek4',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(5,'','','Portek5',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(6,'','','Portek6',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(7,'','','Portek7',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(8,'','','Portek8',07.07.2009);
INSERT INTO `wc3_player` (`player_id` ,`player_steamid` ,`player_ip` ,`player_name` ,`time`) VALUES(9,'','','Portek9',07.07.2009);

Poradnik uważam za skończony, nie należy on do łatwiejszych bo i cała operacja nie jest łatwa. Wymagana jest znajomość struktury baz danych, zapytań SQL. W razie problemów proszę o kontakt w tym temacie lub poprzez Prywatną Wiadomość, będę pomagał :-)

Poradnik wykonany dla www.amxx.pl
Copyright � 2009 Portek. Kopiowanie zabronione.

Mówi o tym USTAWA ART.16
  • +
  • -
  • 22


#249105 Adres strony jako ip serwera

Napisane przez ;(( w 14.05.2011 09:48

[Inny] IP Serwera w domenie - AMXX.pl: Support AMX Mod X
  • +
  • -
  • 1