Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Tut] Jak podejść do tworzenia własnej gry


klaq

Rekomendowane odpowiedzi

Opublikowano

Wstęp

 

Na pewno każdy z nas chociaż raz w życiu chciał stworzyć własną grę. A że proces wydaje się trudny wiele ludzi decyduje sie własnie na via www, chodź myślę, że zasada tworzenia jak i podejście powinno być zawsze takie samo. Oczywiście wiele ludzi jak i całych składów popełnia wiele podstawowych błędów. Ostatni raz podeszłem do tego problemu w 2007 roku kiedy był bum na ugamele, a wcześniej na skrypt vallheru, teraz jest już więcej darmowych skryptów, a tworzenie własnej wymarzonej gry jest na wyciągnięcie ręki. Ten poradnik a raczej artykuł opisujący mój punkt widzenia ma na celu podać Ci jak najwięcej powodów, dla których powinieneś zrezygnować z szalonego pomysłu na tworzenie gry. A dlatego, że wiele osób myśli, że wgranie darmowe skryptu na jakiś serwer, podpięcie jakiegoś aliasa daje nam uczucie posiadanej gry a ludzie będą się zabijać żeby grać u nas. Jednym słowem jeżeli tak myślisz to albo jesteś jeszcze za młody, aby to pojąc albo jesteś idiotą.

 

Genialny pomysł na grę

 

Zacznijmy od tego, że wcale nie musisz być programistą, aby posiadać własną grę. Jednak żeby mieć pełną władze musisz sam ją napisać. Nawet posiadając konkretny skrypt i tak jesteśmy zablokowani brakiem umiejętności, więc nie jesteśmy samowystarczalni co za tym idzie musimy albo bulić komuś kasę bądź mieć nadzieje, że nasz znajomy programistą, który robi za frajer nie wali byków co 3 linijki. Wiele ludzi w wieku 12-18 lat ma marzenie posiadać własną grę, oczywiście nikt Ci nie broni, ale poważnie się zastanów czy masz pokolei w głowie. Bo zrobić lipę każdy potrafi i jeżeli masz załóżmy 15 lat to jesteś głupi jeżeli nie uczysz się programować, nie wmawiaj sobie, że to jest jakieś trudne, cały kod opiera się na logice, do wielu funkcji, możliwości można dojść samemu po czasie poznając podstawy, ale jeżeli ograniczasz się bo twierdzisz, że nie dasz rady to jesteś głąbem. Druga sprawa nie piszę tego poradnika, żeby Ci wszystko podać pod ryja i żebyś po przeczytaniu tego tekstu nadal był głupi. Dlatego nie powiem Ci nic na temat programowania w tym artykule, jedynie teoria do praktyki zapraszam do google, bo podstawowym elementem Twojej kariery twórcy gry zaczyna sie od posiadania umiejętności szukania informacji.

 

Jeżeli ktokolwiek myśli, że może posiadać grę nawet na silniku Vallheru czy innym szicie bez wiedzy php + mysql, to się niestety pomylił. I myślę, że to jest czas, aby sprowadzić was na ziemię. Naprawdę żal mi patrzeć na debili co płaczą na forach, że mają problem z instalacją vallheru – to po jaki kij chłopie bierzesz się za takie rzeczy! Naprawdę wiele bluzgów ciśnie się na usta podczas gdy myślę, że ludzie są naprawdę takimi egoistami, którzy stawiają dla siebie tą grę a nie dla graczy! Przecież to jest chore podejście. Nigdy bez wiedzy programistycznej nie postawisz takiej gry jakiej by chcieli gracze! Nie zdobędziesz graczy na skrypcie na którym jest już setki gier! Zastanów się czym Ty chcesz się wyróżnić i pomyśl czy Ty byś w to zagrał patrząc z punktu osoby trzeciej.

 

Najlepsze są wymówki. Ludzie myślą, że im droższy i posiadający ładną okładke kurs programowania jest lepszy. Gówno prawda, nie musisz nic płacić żeby posiadać tą wiedze a autorzy takich kursów pieprzą głupoty, 30 stron teorii, 1 strona praktyczna. Po kij komu ta teoria, to jest jakby do zbierania jabłek dali Ci kurs gdzie jest 100 stron na ten temat, a możesz po prostu pójść i zerwać te jabłka.

 

Trening czyni mistrza. Nie bierz się od razu za wielki projekt, do których silnik gry należy. Zacznij od nauki prostych skryptów z czasem będziesz mógł konkretnie zabrać się za robienie gry. Nie wierz w bzdury pseudo-programistów, którzy twierdzą, że pisanie gry to nawet rok czasu. Dobry programista jest w stanie napisać grę pokroju The Crims, Bitefight w 2 miesiące czasu! I nie mówię tutaj o 8 godzinnym trybie pracy.

 

Mam pomysł

 

Wielu z was napewno już wymyśliła swoją grę. Jednak pamiętaj, że kolejna gry o smokach, rycerzach czy wojnach kosmicznych jest spalona, spóźniłeś się jakieś 5 lat więc nie dasz rady się przebić. Pomysł musi być unikalny i grywalny a zarazem dobrze wykonany. Zanim przystąpisz do myślenia nad swoją przyszłą grą najpierw postaraj się przeszukać internet w celu sprawdzenia co jest teraz trendy, przejżyj topki gier przeglądarkowych, co się długo trzyma i zastanów się dlaczego, co trzyma graczy. Pamiętaj, że Twoja gra oprócz tego, że musi być ciekawa to też na tyle trudna, aby gracz po 10 dniach gry nie zrezygnował z niej ze względu na to, że będzie mu żal straconego czasu i pracy jaką włożył w Twoją grę. Jednym słowem musisz uzależniać graczy tworzą pewne mechanizmy. Oczywiście wiadomo, że pewne tematyki gier są na tyle dobre, że trzymają graczy mimo, że gier fantasy jest naprawdę dużo.

 

Symulatory, managery są też dobrym wyborem. Na pewno wiele ludzi chętnie zagrałoby w grę gdzie możemy zarządzać własnym lotniskiem lub linią lotniczą być może dobrym pomysłem będzie manager sportowy a załóżmy koszykówka, więcej ludzi na początek stwierdzi, że piłka nożna jest lepsza, niestety konkurencja ma naprawdę dobre gry więc raczej celowałbym w nisze typu hokej, koszykówka, siatkówka lub nawet gra typu extreme sports... bmx, deskorolka, rolki czy snowboard.

 

Bardzo dobrą praktyką jest nie branie się od razu za tworzenie swojej gry, a raczej dokumentacji, która oczywiście jest niezbędna. Mamy dwa typy dokumentacji o czym rozwinę póżniej, wróćmy do samej idei. Chodzi o to, że warto się przespać z pomysłem, zanim wybierzemy konkretny temat żyjmy ze świadomością, że chcemy stworzyć grę 2-3 dni myśląc co tak naprawdę warto, w czym jesteśmy dobrzi, w co sami byśmy chcieli zagrać. Dobrze by było następnie dobrze poznać temat, jeżeli wybierzemy koszykówkę warto znać wszystkie zasady panujące w tym sporcie, jak co działa, jak są organizowane drużyny, jak przeprowadza się transfery graczy, na jakiej zasadzie działa NBA. Warto sobie zadawać wiele pytań odpowiadając na nie informacjami wyszukanymi w internecie. Poznajmy najpierw środowisko w jakie chcemy uderzyć.

 

Analiza konkurencji to następna rzecz jaką powinniśmy zrobić. Oczywiśćie może się zdarzyć, że nasz pomysł jest na tyle unikalny, że takiej gry nie ma nawet zagranicą. Jeżeli jednak są tworzymy konta w takich grach, gramy, testujemy a następnie oceniamy, zadajemy kolejne pytania, określamy plusy i minusy.

 

Ocena własnych możliwości. Jeżeli jesteśmy już pewni, że będziemy tworzyć grę typu manager koszykówki określmy się jakie technologie wykrzystamy podczas produkcji oraz realnie oceńmy swoje możliwości.

 

Tworzenie dokumentacji

 

Jeżeli myślisz poważnie nad stworzeniem gry podstawowym filarem jest właśnie dokumentacja. Wspomniałem o dwóch typach. Pierwsza to dokumentacja ogólna a prościej mówiąc fabuła czyli nasz wizja na temat gry, wszelkie pomysły oraz opis jakbyśmy widzieli grę z pozycji gracza. Drugą zaś jest dokumentacja docelowa czyli programistyczna, wypisane wszystkie opcje i funkcje od punktów, aby programista dokładnie wiedział o co nam chodzi. Dokumentacja ogólna to taki nasz pomocnik przy spisywaniu możliwości i opcji w dokumentacji programistycznej.

 

Oczywiście bez biznesplan żaden projekt na świecie nie dotrwa do końca. Wiem początki mogą się wydawać dla niektórych nudne, dla mnie pisanie fabuły gry to świetne doświadczenie. I czerpie z tego dużo przyjemności.

 

Zespół

 

No bardzo ważny czynnik, jeżeli nie jesteś programistą to leżysz na starcie. Jeżeli nie jesteś grafikiem to masz prawdziwy problem. Twoja siła teraz polega na napisaniu fabuły i dokumentacji z prawdziwego zdarzenia. Następny zadaniem jest znalezienie grafika i przedstawienie mój swojej koncepcji, najlepiej żeby wykonał on projekt wstępny a następnie powinieneś zacząć szukać programisty i przekonywać go właśnie tymi elementami.

 

Jest to czarny scenariusz i ogólnie powiem tak – jeżeli jesteś w takiej sytuacji poważnie zastanów się czy jest sens. Lepiej okazać się cierpliwym i przystąpić do nauki programowania, aby za pół roku spróbować ponownie.

 

Jeżeli jesteś dobrym grafikiem warto zorganizować dobrą dokumentacje i wstępne projekty myślę, że szybko znajdziemy chętnego programistę do współpracy. Będąc programistą możemy sami pisać dokumentacje lub kogoś poszukać o ile mamy dobre umiejętności, ale nie mamy wyobraźni.

 

Początki są trudne i zalecam rozpoczęcie samemu, w końcu przyjedzie czas kiedy stwierdzimy, że już nie ogarniemy sami i potrzebujemy ludzi. Członków trzeba motywować i nie przyjmować byle kogo, tym lepiej się przygotujemy tym lepszych ludzi do siebie ściągniemy. Oczywiście gadka typu zainstaluj mi grę a dostaniesz moderatora – jest oczywiście niepoważne i zalecam do powrotu na samą góre artykułu. Członek powinien czuć się ważny oraz powinien zostać za to nagradzany różnymi pochwałami. Jeżeli sami nic nie wnosimy do projektu jesteśmy zbędnym wżodem na dupie. Samo napisanie fabuły bez żadnych umiejętności nie czyni z nas lidera a raczej gości, który szuka zółwi do roboty za frajer. Ranga nie nakarmi rodziny.

 

I na tym kończymy. Nie jest to poradnik jak stworzyć grę a raczej jak podejść do tematu tworzenia gier zanim poważnie do tego przystąpimy. Planuje kolejne części jeżeli ten wstęp spotka się z ciepłym przyjęciem.

 

Kopiowanie zabronione bez zgody autora, © 2011 - klaq dla mpcforum.pl

Opublikowano

Świetny poradnik [Lubie to] :)

Tak się sklada, ,że jestem grafikiem pixelartowym, i zaczynam tworzyc gre.

gdy zrobie juz dosyc duzo grafik do tej gry, zaloze temat na tym forum

oczywiście nie zapomne o fabule

Specjalista
Opublikowano

Przyznam że jako teoreotyczny poradnik jest dobry !

Można byłoby poruszyć jeszcze kilka kwesti, ale jak dla początkującego jest dobry i zrozumiały.

Czekamy na dalsze poradniki :)

Like -_-

Opublikowano

Połowe przeczytałem i juz dalej niechce. Masz racje chłopie ! Kawał dobrej roboty. To niejest trudne nauczyć się programować - wystarczą chęci i jakiś wkład - HTML'a uczą w gimnazjum. CSS - porobisz kilka własnych na podstawie poradników opisujących funkcje i zapamiętasz. PHP - w nim na bank wszystkich "komend" na pamięć niebędziesz umiał ale wiele z nich tak !

Ja uczyłem się na mojej paczce ,którą zamieściłem w opisie do nauki PHP - SUROWY KOD PHP połączony funkcjami, CSS-em, HTML i SQL - tydzień bawiłem się rejestracją aż nauczyłem się to zmieniać tak jak chce - Funkcje prywatne TEŻ ! HTML - był w szkole ;). CSS - Bo kurde głupio tak wygląda moja strona :/. Chyba się pouczę CSS'a.

JS - dobra poziom wyżej ,hehe. Naprawdę - wszystkiego nauczyłem się za darmo.

Strony tworzę od marca/kwietnia - na koncie mam 2 szablony metin2, własną grę, teraz tworzę drugą, narzędzia administracyjne, własny sklep i to wszystko w 9 miesięcy. Nauka PHP, HTML i CSS - do czerwca (3 miesiące by umieć PHP jak bum cyk cyk a reszte na dobrym poziomie).

 

Co jeszcze dodam ? :

MAM 15 LAT ! Niechodzę na jakieś kursy HTML, PHP czy coś takiego - po prostu mam chęci

 

A wiecie jakie były moje pierwsze słowa gdy zobaczyłem pierwszy plik PHP ?

 

- Co to kur... jest ?!

 

Pomyśl jak to wyglądało dla Laika (Wszelkie prawa zastrzerzone ! Zakaz kopiowania) :

 

 

<?php
#!/usr/bin/php_once
//<!--// PHP Script Document -------------------------------------------------//
/* --------------------------------------------------------- >>>------------- */
class WebSecurity {

 public $RequestData, $ConnectionStringName, $UserTableName, $UserNameField, $UserIdField;
 public $ReturnUrl, $IsAuthenticated, $CurrentUserId, $CurrentUserName, $CurrentUserEmail;
/* --------------------------------------------------------- >>>------------- */
 public function InitializeDatabaseConnection($connectionStringName, $userTableName, $userIdColumn, $userNameColumn, $autoCreateTables=false) {

   $this->ConnectionStringName = $connectionStringName;
   $this->UserTableName = $userTableName;
   $this->UserNameField = $userNameColumn;
   $this->UserIdField   = $userIdColumn;

   $db = self::DatabaseInstance();
   $this->CurrentUserEmail = (isset($_SESSION['CurrentUserEmail'])? $_SESSION['CurrentUserEmail']:null);
   $this->CurrentUserId    = (isset($_SESSION['CurrentUserId'])   ? $_SESSION['CurrentUserId']   :null);
   $this->CurrentUserName  = (isset($_SESSION['CurrentUserName']) ? $_SESSION['CurrentUserName'] :null);
   $this->IsAuthenticated  = (isset($_SESSION['IsAuthenticated']) ? $_SESSION['IsAuthenticated'] :null);
   $this->ReturnUrl	    = (isset($_SESSION['ReturnUrl'])	   ? $_SESSION['ReturnUrl']	   :null);
   if($autoCreateTables==true) { }
 }
/* --------------------------------------------------------- >>>------------- */
//  Can we name this Database since there is also the Database.Open thing?
 public function DatabaseInstance() {
   // HTTPContext could be null
   $RequestData = $this->RequestData;
   $db = is_resource($RequestData)?$RequestData->GetValue("Database"):null;

   if ($db == null) {
  ##-------------------------------------
  ## Poniżej należy określić bazę danych:
  ##-------------------------------------
/*	  $dbHost	 = 'localhost';
  $dbUser	 = 'root';
  $dbPassword = '';*/
  $dbHost	 = 'localhost';
  $dbUser	 = 'root';
  $dbPassword = '';

  //$dbDataBase = $this->ConnectionStringName;//"Calendar";
  $this->RequestData = new Connection($dbHost, $dbUser, $dbPassword, $this->ConnectionStringName );
  $this->RequestData->SetValue("Database", $this->ConnectionStringName);
   }
   return $this->RequestData;
 }

/* --------------------------------------------------------- >>>
public static int GetPasswordFailuresSinceLastSuccess(string userName)
   Member of WebMatrix.WebData.WebSecurity
------------- */
 public function GetPasswordFailuresSinceLastSuccess($userName) {
   $failuresLast = 999;
   if (self::UserExists($userName)) {
  $userId = self::GetUserId($userName);
  $db = self::DatabaseInstance();
  $query = "SELECT PasswordFailuresSinceLastSuccess FROM WebPages__Membership WHERE UserId = %d";
  $failuresLast = $db->QuerySingle( $query, $userId );
   }
   return (int)$failuresLast;
 }
/* --------------------------------------------------------- >>>
public static System.DateTime GetPasswordChangedDate(string userName)
   Member of WebMatrix.WebData.WebSecurity
public static System.DateTime GetLastPasswordFailureDate(string userName)
   Member of WebMatrix.WebData.WebSecurity

------------- */
 public function GetLastPasswordFailureDate($userName) {
   $failureDate = date("Y-m-d H:i:s", time());
   if (self::UserExists($userName)) {
  $userId = self::GetUserId($userName);
  $db = self::DatabaseInstance();
  $query = "SELECT LastPasswordFailureDate FROM WebPages__Membership WHERE UserId = %d";
  $failureDate = $db->QuerySingle($query, $userId);
   }
   return $failureDate;
 }
 public function SetLastPasswordFailure($userName) {
   if (self::UserExists($userName)) {
  $userId = self::GetUserId($userName);
  $db = self::DatabaseInstance();
  $query = "SELECT PasswordFailuresSinceLastSuccess FROM WebPages__Membership WHERE UserId = %d";
  $passwordFailures = $db->QuerySingle($query, (int)$userId);

  $query = "UPDATE WebPages__Membership SET PasswordFailuresSinceLastSuccess = %d, LastPasswordFailureDate = NOW() WHERE UserId = %d";
  $query = $db->Execute($query, (int)$passwordFailures + 1, (int)$userId);
   }
 }
/* --------------------------------------------------------- >>>
public static bool Login(string userName, string password, [bool persistCookie = false])
   Member of WebMatrix.WebData.WebSecurity

Summary:
Logs the user in.

Parameters:
userName: The user name.
password: The password for a user.
persistCookie: (Optional) true to specify that the authentication token in the cookie should be persisted beyond the current session; otherwise false. The default is false.

Returns:
true if the user was logged in; otherwise false.
------------- */
 public function Login( $userName, $userPassword, $persistCookie = false ) {

   if (self::UserExists($userName)) {
  $userId = self::GetUserId($userName);

  $query = "SELECT * FROM WebPages__Membership WHERE UserId = %d AND Password = '%s'";
  $db = self::DatabaseInstance();
  $WebUser = $db->Query( $query, self::GetUserId($userName), md5($userPassword) );
  $CurrentUser = self::GetUser($userId);
   }

   if( isset($WebUser) ) {
  $query = "UPDATE WebPages__Membership SET PasswordFailuresSinceLastSuccess = 0 WHERE UserId = %d AND Password = '%s'";
  $db->Execute($query, $userId, md5($userPassword));
  //if(!isset($WebUser['ConfirmationToken'])) {
    $_SESSION['IsAuthenticated'] = true;
    $_SESSION['CurrentUserId'] = $userId;
    $_SESSION['CurrentUserName'] = $userName;
    if($persistCookie) {
	  setcookie("CurrentUserId", $userId, time()+5270400, "/" );
	  setcookie("CurrentUserName", $userName, time()+5270400, "/" );
    }
    $this->IsAuthenticated = true;
    $this->CurrentUserEmail = $userName;
    $this->CurrentUserName = $userName;
    $this->CurrentUserId = $userId;
    return true;
  //}
   } else {
  self::SetLastPasswordFailure($userName);
  unset( $_SESSION['IsAuthenticated'],
		 $_SESSION['CurrentUserId'],
		 $_SESSION['CurrentUserName'] );
   }
   return false;
 }
/* --------------------------------------------------------- >>>
WebSecurity::__set_state(array(
  'RequestData' =>
 Connection::__set_state(array(
 'link' => NULL,
 'Database' => 'Calendar',
 'data' =>
   array (
  'Database' => 'Calendar',
   ),
 'server' => 'localhost',
 'username' => 'root',
 'password' => 'enter',
 )),
  'ConnectionStringName' => 'Calendar',
  'UserTableName' => 'UserProfile',
  'UserNameField' => 'Email',
  'UserIdField' => 'UserId',
  'ReturnUrl' => NULL,
  'IsAuthenticated' => true,
  'CurrentUserId' => NULL,
  'CurrentUserName' => '[email protected]',
  'CurrentUserEmail' => NULL,
))
public static string CreateUserAndAccount(string userName, string password, [object propertyValues = null], [bool requireConfirmationToken = false])
   Member of WebMatrix.WebData.WebSecurity

Summary:
Creates a new user and a new user account.

Parameters:
userName: The user name.
password: The password for the user.
propertyValues: (Optional) A dictionary that contains additional user attributes. The default is null.
requireConfirmationToken: (Optional) true to specify that the account must be confirmed; otherwise, false. The default is false.
------------- */
 public function CreateUserAndAccount( $userName, $password, $propertyValues = array(), $requireConfirmation = false ) {
   $token = null;
   $db = self::DatabaseInstance();
   if (self::UserExists($userName)) {
  $db->Execute("UPDATE %s SET %s = '%d' WHERE %s = '%s'"
			  , $this->UserTableName
			  , $this->UserIdField
			  , isset($propertyValues[$this->UserIdField]) ? (int)$propertyValues[$this->UserIdField] : ''
			  , $this->UserNameField
			  , $userName
			  );
   } else {
  if ( $requireConfirmation ) {
    $token = self::GeneratePasswordResetToken( $userName );
    $query = "INSERT INTO WebPages__Membership ( CreateDate, ConfirmationToken, Password ) VALUES ( NOW(), '%s', '%s' )";
    $db->Execute($query, $token, md5($password));
  } else {
    $query = "INSERT INTO WebPages__Membership ( CreateDate, Password ) VALUES ( NOW(), '%s' )";
    $db->Execute($query, md5($password));
  }

  $db->Execute("INSERT INTO %s (%s, %s) VALUES (%d, '%s')"
			  , $this->UserTableName
			  , $this->UserIdField
			  , $this->UserNameField
			  , $db->GetLastInsertId()
			  , $userName
			  );
   }
   return $token;
 }
/* --------------------------------------------------------- >>>
public static string CreateAccount(string userName, string password, [bool requireConfirmationToken = false])
   Member of WebMatrix.WebData.WebSecurity

Summary:
Creates a new user account with the specified user name and password.

Parameters:
userName: The user name.
password: The password for the user.
requireConfirmationToken: (Optional) true to specify that the account must be confirmed; otherwise, false. The default is false.

Returns:
A token from the provider that created the account.
------------- */
 public function CreateAccount( $userName, $password, $requireConfirmationToken = false ) {
   $token = null;
   $db = self::DatabaseInstance();
   if (self::UserExists($userName)) {
  if ( $requireConfirmationToken ) {
    $token = self::GeneratePasswordResetToken( $userName );
    $query = "INSERT INTO WebPages__Membership ( CreateDate, ConfirmationToken, Password ) VALUES ( NOW(), '%s', '%s' )";
    $db->Execute($query, $token, md5($password));
  } else {
    $query = "INSERT INTO WebPages__Membership ( CreateDate, Password ) VALUES ( NOW(), '%s' )";
    $db->Execute($query, md5($password));
  }
  $db->Execute("UPDATE %s SET %s = '%d' WHERE %s = '%s'"
			  , $this->UserTableName
			  , $this->UserIdField
			  , $db->GetLastInsertId()
			  , $this->UserNameField
			  , $userName
			  );
   } else {
  $propertyValues[$this->UserIdField] = $db->GetLastInsertId();
  $token = self::CreateUserAndAccount($userName, $password, $propertyValues, $requireConfirmationToken);
   }
   return $token;
 }
/* --------------------------------------------------------- >>>
public static void Logout()
   Member of WebMatrix.WebData.WebSecurity

Summary:
Logs the user out.
------------- */
 public static function Logout() {
   session_destroy();
   $_SESSION = array();
   //$_SESSION['ReturnUrl'] = $this->ReturnUrl;
   //return 'Default.php';
 }
/* --------------------------------------------------------- >>>
public static string GeneratePasswordResetToken(string userName, [int tokenExpirationInMinutesFromNow = 1440])
   Member of WebMatrix.WebData.WebSecurity

Summary:
Generates a password reset token that can be sent a user in email.

Parameters:
userName: The user name.
tokenExpirationInMinutesFromNow: (Optional) The time in minutes until the password reset token expires. The default is 1440 (24 hours).

Returns:
A token from the provider to send to the user.
------------- */
 public function GeneratePasswordResetToken($userName, $tokenExpirationInMinutesFromNow = 1440) {
   //(time()+(7 * 24 * 60 * 60)7 days; 24 hours; 60 mins; 60secs
   $tokenExpiration = time()+(intval($tokenExpirationInMinutesFromNow)*60);
   $tokenString = md5($userName.$tokenExpiration); //sha1 crc32

   if (self::UserExists($userName)) {
  $db = self::DatabaseInstance();
  $query = "UPDATE WebPages__Membership SET PasswordVerificationToken = '%s', PasswordVerificationTokenExpirationDate = '%s' WHERE UserId = %d";
  $db->Execute($query, $tokenString, date("Y-m-d H:i:s", $tokenExpiration), self::GetUserId($userName));
   }
   return $tokenString;
 }
/* --------------------------------------------------------- >>>
public static int GetUserId(string userName)
   Member of WebMatrix.WebData.WebSecurity

Summary:
Gets the ID for a user based on the user name.

Parameters:
userName: The user name.

Returns:
The ID of the logged-in user.
------------- */
 public function GetUserId($userName) {
   $query = sprintf("SELECT %s FROM %s WHERE %s = '%%s'", $this->UserIdField, $this->UserTableName, $this->UserNameField );
   $db = self::DatabaseInstance();
   $userId = $db->QuerySingle( $query, $userName );

   return (intval(is_numeric($userId) ? $userId : -1 ));
 }
/* --------------------------------------------------------- >>>
public static bool UserExists(string userName)
   Member of WebMatrix.WebData.WebSecurity

Summary:
Returns a value that indicates whether the specified user exists in the membership provider database.

Parameters:
userName: The user name.

Returns:
true if the membership provider found username; otherwise, false.
------------- */
 public function UserExists($userName) {
   return ( self::GetUserId($userName) > -1 ? true : false );
 }
/* --------------------------------------------------------- >>>
public abstract bool IsConfirmed(string userName)
   Member of WebMatrix.WebData.ExtendedMembershipProvider
public override bool IsConfirmed(string userName)
   Member of WebMatrix.WebData.SimpleMembershipProvider
public static bool IsConfirmed(string userName)
   Member of WebMatrix.WebData.WebSecurity

Summary:
Returns a value that indicates whether the logged-in user has been confirmed by the provider.

Parameters:
userName: The user name.

Returns:
true if the user is confirmed; otherwise, false.
------------- */
 public function IsConfirmed($userName) {
   if (self::UserExists($userName)) {
  $db = self::DatabaseInstance();
  $query = "SELECT IsConfirmed FROM WebPages__Membership WHERE UserId = '%s'";
  $confirmed = $db->QuerySingle( $query, self::GetUserId($userName) );
  if($confirmed==true) return true;
   }
   return false;
 }
/* --------------------------------------------------------- >>>
public static bool ConfirmAccount(string accountConfirmationToken)
   Member of WebMatrix.WebData.WebSecurity

Summary:
Gets a value that indicates whether an account has been confirmed as a valid account with the provider.

Parameters:
accountConfirmationToken: A confirmation message to pass to the authentication provider.

Returns:
true if the account is confirmed; otherwise, false.
------------- */
 public function ConfirmAccount( $accountConfirmationToken ) {
   $db = self::DatabaseInstance();
   $query = "UPDATE WebPages__Membership SET IsConfirmed = TRUE WHERE ConfirmationToken = '%s'";
   $res = $db->Execute($query, $accountConfirmationToken);
   if($res==true) return true;
   return false;
 }
/* --------------------------------------------------------- >>>
public static bool ChangePassword(string userName, string currentPassword, string newPassword)
   Member of WebMatrix.WebData.WebSecurity

Summary:
Changes the password for the specified user.

Parameters:
userName: The user name.
currentPassword: The current password for the user.
newPassword: The new password.

Returns:
true if the password is successfully changed; otherwise, false.
------------- */
 public function ChangePassword($userName, $currentPassword, $newPassword) {
   //if (self::IsConfirmed($userName)) { }
   if (self::UserExists($userName)) {
  $db = self::DatabaseInstance();
  $query = "UPDATE WebPages__Membership SET Password = '%s', PasswordChangedDate = NOW() WHERE UserId = %d";
  $res = $db->Execute($query, md5($newPassword), self::GetUserId($userName));
  return ($res==true)?true:false;
   }
 }
/* --------------------------------------------------------- >>>
public static int GetUserIdFromPasswordResetToken(string token)
   Member of WebMatrix.WebData.WebSecurity
------------- */
 public function GetUserIdFromPasswordResetToken( $token ) {
   $db = self::DatabaseInstance();
   $query = "SELECT UserId FROM WebPages__Membership WHERE PasswordVerificationToken = '%s' AND PasswordVerificationTokenExpirationDate > NOW()";
   $userId = $db->QuerySingle( $query, $token );
   return ( intval( is_numeric( $userId ) ? $userId : -1 ) );
 }
/* --------------------------------------------------------- >>>
public static bool ResetPassword(string passwordResetToken, string newPassword)
   Member of WebMatrix.WebData.WebSecurity

Summary:
Changes a password.

Parameters:
passwordResetToken: A password reset token.
newPassword: The new password.

Returns:
true if the password was changed; otherwise, false.
------------- */
 public function ResetPassword( $passwordResetToken, $newPassword ) {
   $userId = self::GetUserIdFromPasswordResetToken( $passwordResetToken );
   if ($userId >-1) {
  $db = self::DatabaseInstance();
  $query = "UPDATE WebPages__Membership SET Password = '%s', PasswordChangedDate = NOW() WHERE UserId = '%d'";
  $res = $db->Execute($query, md5($newPassword), (int)$userId);
  if( $res == true ) return true;
   }
   return false;
 }
/* --------------------------------------------------------- >>>
public static bool IsAuthenticated { get; }
   Member of WebMatrix.WebData.WebSecurity

Summary:
Gets the authentication status of the current user.

Returns:
true if the current user is logged in; otherwise, false. The default is false.
------------- */
 public function IsAuthenticated() {
   return (isset($this->CurrentUserId)?true:false);
 }

/* --------------------------------------------------------- >>>
public static void RequireAuthenticatedUser()
   Member of WebMatrix.WebData.WebSecurity

Summary:
If the user is not authenticated, sets the HTTP status to 401 (Unauthorized).
------------- */
 public function RequireAuthenticatedUser() {
   if (empty($this->IsAuthenticated)) {
  header('HTTP/1.0 401 Unauthorized');
  header('Location: ../Konto/logowanie.php?ReturnUrl='.urlencode($_SERVER['PHP_SELF']));
  exit;
   }
 }
/* --------------------------------------------------------- >>>
public static int AddUser(string name, string email, string timeZone)
   Member of UserHelper
------------- */
 public function AddUser($name = null, $email, $timeZone = null) {
/*
   $db = self::DatabaseInstance();
   $query = sprintf("INSERT INTO %s (%s, Name, %s, TimeZone) VALUES (%%d, '%%s', '%%s', '%%s')", $this->UserTableName, $this->UserIdField, $this->UserNameField);
   $res = $db->Execute( $query, $userId, $name, $email, $timeZone);
   return $res;
   var_export(gettype($res).$res);exit;
*/
   $db = self::DatabaseInstance();
   if(!empty($name)&&!empty($timeZone)) {
  $query = sprintf("INSERT INTO %s (Name, Email, TimeZone) VALUES ('%%s', '%%s', '%%s')", $this->UserTableName);
  $db->QuerySingle($query, $name, $email, $timeZone);
   } else {
  $query = sprintf("INSERT INTO %s (Email) VALUES ('%%s')", $this->UserTableName);
  $db->QuerySingle($query, $email);
   }

   return (int)($db->GetLastInsertId());
 }
/* --------------------------------------------------------- >>>------------- */
 public function CurrentUser() {
   // HTTPContext could be null
   $current = $_SESSION['CurrentUser'];
   if (empty($current )) {
  $current = self::GetUser($_SESSION['CurrentUserId']);
  $_SESSION['CurrentUser'] = $current;
   }
   $CurrentUserEmail = $current["Email"];
   $CurrentUserId = $current["Id"];
   $CurrentUserName = $current["Name"];
   return $CurrentUserEmail;
 }
/* --------------------------------------------------------- >>>------------- */
 public function GetUser( $userId ) {
   $query = sprintf("SELECT * FROM %s WHERE %s = '%%d'", $this->UserTableName, $this->UserIdField);
   $db = self::DatabaseInstance();
   $user = $db->Query($query, (int)$userId);
   return $user;
 }
/* --------------------------------------------------------- >>>------------- */
}
?>

 

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...