avatar_DapKUH

5 уровней прогрессии в PHP-программировании

Автор DapKUH, 2010 Апр. 22, 12:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] mu onlinephpпрограммирование

DapKUH

Друзья, те кто разбирается в PHP, опять же легранд или кто либо другой, вопрос встал ребром, давно хотел сделать 5 уровней прогрессии, например 1 - ресет = 350 уровню 2 - 380, 3 - 390, 4 - 395, 5 - 400

Как можно такое организовать? мб кто скинит кусок кода с помощью которого я смог бы понять как сделать такую фишку?

За ранее спасибо, зы в роде у дедлеса (если не правильно написал без обид) была на сайте такая фишка, еслиб поделился было бы очень приятно))


GrInYa

это очень просто...создаешь таблицу с номера ресета, и уровень для ресета....суёшь там нужные данные, а там уже в коде делаешь проверки

$nextreset = //тут должно быть номер ресета который мы делаем
$mylevel = //тут должно быть уровень персонажа
$resetlevel =  //тут должно быть уровень ресета по дефолту

$isreset=false;
$result=mssql_query("select leveln from randomresets where resetn=$nextreset");
if (mssql_num_rows($result) > 0)
{
$myrow=mssql_fetch_array($reset);
if ($myrow['leveln'] <=$mylevel) $isreset=true; else $isreset=false;
}
elseif($mylevel >= $resetlevel) $isreset=true;

if ($isreset==true)
{
//тут пишем скрипт для ресета
}

epmak

#2
если это скрипт на сайте, то проще после нажатия на кнопку "сделать ресет" или при генерации страницы, проверять уровень и рес, если рес 1, то достаточно 350, если 2 - 380 и так далее. удовлетворяет условие - стандартная процедура реса, зачемм так сложно?

GrInYa

сложно, не сложно, но после сделает админку и будет ещё проще редактировать

epmak

#4
в данном случае речь не шла о админке  и зачем сразу в базу забивать? не проще ли массив сделать? и к базе лишний раз обращаться не надо  да и редактировать проще в разы, как, в прочем и код.

GrInYa

если подумать в сфере сложности то да...а в сфере програмированием это тебе даст дублированием кода и процесов обработки...к примеру если ему понадобица 30-50 разных ресетов (1р-301,2р-305,3р-308,и.т.д) то сам уже делай выводы...обработать масив от 1 до 30 раз...лучше уже будет с базы вытащить то что нужно и работать...боятся лишнего запроса не нужно так как выводит не больше 2 значений

epmak

#6
хм, мне казалось, что база данных, это по сути массив, только в базе данных мы вводим запрос, а сам "движок" базы делает всю работу за пхп, передовая пхп результаты. Теперь главный вопрос, при грамотном составлении массива в самом пхп, что будет быстрее, и более не требовательно к ресурсам, обработчик пхп или все-таки мсскл?
в данном случае автор просил 5 разных условий, а не 30-50

Deathless

Легко и просто:
$Reset1['reset'] = 5; // С 0 до Reset1 ресета
$Reset2['reset'] = 10; // С Reset1 до Reset2 ресета
$Reset3['reset'] = 15; // С Reset2 до Reset3 ресета
$Reset4['reset'] = 20; // С Reset4 и до конца
$Reset1['level'] = 360; // Уровень ресета с 0 до Reset1 ресета
$Reset2['level'] = 370; // Уровень ресета с Reset1 до Reset2 ресета
$Reset3['level'] = 380; // Уровень ресета с Reset2 до Reset3 ресета
$Reset4['level'] = 390; // Уровень ресета с Reset3 до Reset4 ресета
$Reset5['level'] = 400; // Уровень ресета с Reset4 и до конца

$res_char_info = mssql_query("Select Clevel,Resets,Money,LevelUpPoint,Class From Character where Name='$char_name'");
$res_char_info = mssql_fetch_row($res_char_info);

if($res_char_info[1] <= $Reset1['reset']) {
$resetlevel = $Reset1['level'];
}
elseif($res_char_info[1] <= $Reset2['reset'] AND $res_char_info[1] >= $Reset1['reset']+1) {
$resetlevel = $Reset2['level'];
}
elseif($res_char_info[1] <= $Reset3['reset'] AND $res_char_info[1] >= $Reset2['reset']+1) {
$resetlevel = $Reset3['level'];
}
elseif($res_char_info[1] <= $Reset4['reset'] AND $res_char_info[1] >= $Reset3['reset']+1) {
$resetlevel = $Reset4['level'];
}
else {
$resetlevel = $Reset5['level'];
}

Осталось только самому переменные поменять.

epmak

Спойлер
о чем я и говорил :)
вот поэтому гринь, кашу маслом можно испортить
[свернуть]

GrInYa

#9
ermak, не говори  ...если есть 5 уровней то както дублирование незаметно......а если будут 50? что 50 раз напишешь elseif ?...а ты ешё говоришь что врубаешься в оптимизации...эти 15 строк можно оптимизировать до 5, даже если будут и 150 таких...+ ешё 8 из 10 ненужных переменных в буфере памяти

epmak

#10
гринь у тебя в сайте точно также, зачем пыжиться и усложнять сайт и тратить лишнее время на то, что не просили? сказано было на 5 сделали на 5, на 500, уже другая тема совершенно. Зачем, допустим к 100 этажному дому при его строительстве достраивать еще 50 этажей? про запас чтоли?

кстати, чет не глянул сразу, можно извратится и чуток оптимизировать.

GrInYa

#11
вот тогда вариант попроще

<?php

//Config
$reset[1]=301;
$reset[2]=321;
$reset[3]=341;
$reset[4]=381;
$reset[5]=400;
//End Config

foreach($reset as $reset_ => $level)
{
if (
$reset_ == $myreset and $level<=$mylevel)
{
$isreset=true;
break;
}
}

if(
$isreset == false and $mylevel >= $resetlevel$isreset=true;

if (
$isreset=true)
{
//тут пишем скрипт для ресета
}
?>

а также тут проще сделать изменения или добавить переменных без изменения кода

epmak

вот теперь истину глаголишь

GrInYa

#13
Спойлер
Цитата: epmak от 2010 Апр. 23, 09:04  Зачем, допустим к 100 этажному дому при его строительстве достраивать еще 50 этажей? про запас чтоли?

кстати, чет не глянул сразу, можно извратится и чуток оптимизировать.
:) так для начало нужно всё прадумать...а там уже строить...чтоб не дошол до 80-го и вдруг у тебя появится денек чтоб строить ишё 50 этажей а фундамент не позволит этого, или захотеть сделать евроремонт но по проекту никак не вложется он...учись видеть и будущее того что делаешь чтоб потом тебе было легче и без сильных затрат...

PS: лично я так всегда делаю
[свернуть]

epmak

Спойлер
это не всегда рационально, особенно, когда скрипт делается под 1 сервер.
[свернуть]

DapKUH

Цитата: GrInYa от 2010 Апр. 23, 07:24  вот тогда вариант попроще

<?php

//Config
$reset[1]=301;
$reset[2]=321;
$reset[3]=341;
$reset[4]=381;
$reset[5]=400;
//End Config

foreach($reset as $reset_ => $level)
{
if (
$reset_ == $myreset and $level<=$mylevel)
{
$isreset=true;
break;
}
}

if(
$isreset == false and $mylevel >= $resetlevel$isreset=true;

if (
$isreset=true)
{
//тут пишем скрипт для ресета
}
?>

а также тут проще сделать изменения или добавить переменных без изменения кода


Гриня, можешь написать полный скрипт ресета с прогрессией?
С формой ввода  аккаунта, персонажа и пароля.

Интересно посмотреть как ты это напишешь, я написал но обрабатываться почему то отказывает..  хз почему, использовал скрипт дедлеса, переменные поменял, кое что дописал и не хочет, по прежнему делает только с 400.. Бред короче :)

worldhero

#16
цикл: foreach бестолковая вещь в малых кодах..
ресурсов жрет дох** а толку 0....
по личному опыту - использовать данный цикл, при проверки глобальных значений на большом количестве диапазона, в противном случаи лишние затраты системы и уменьшение скорости работы, это также как и функции - использовать нужно только при большом количестве обращений - пример ТОП (100 раз обратиться к функции гораздо проще и быстрее, нежели вызвать скрипт "пример погрузкой файла"), но если повторяется единожды скрипт - то проще вызывать его файлом и минус 50% времени на загрузку, тоже самое и с циклами...
$reset[5]=400;
if ($reset[$reset_user] <= $level_user) {
делаем ресет
}

также можно сделать так:
$level_reset=range(350,400,10);
$level_reset_normal=400;
if (empty($level_reset[$reset_user])) {
$level_reset[$reset_user]=$level_reset_normal;
}
if ($level_reset[$reset_user] <= $level_user) {

делаем ресет

}
таким образом - будут прибовляться за каждый ресет + 10 уровней начиная с 350
а дальше всегда по 400, и ресурсов кушает еще меньше!
на крайняк так сделать можно:
$level_reset = array();
$level_reset = array_pad($level_reset ,10,350);
$level_reset = array_pad($level_reset ,20,360);
$level_reset = array_pad($level_reset ,50,380);
$level_reset_normal=400;

$reset_user=0; ресетов у пользователя
$level_user=400; уровень у пользователя

if (empty($level_reset[$reset_user])) {
$level_reset[$reset_user]=$level_reset_normal;
}
if ($level_reset[$reset_user] <= $level_user) {

делаем ресет

}
тоже быстро работает + указывать можно диапозонами, тут:
первые 10 ресетов по 350 уровень, потом 10 ресов по 360 потом до 50 по 380 остальное по 400

GrInYa

ну да есть и такой вариант вместо foreach... :)

<?
if ((isset($reset[$myreset]) and $reset[$myreset] <= $mylevel) or $normal_r_level <= $mylevel)
{
//reset script ;)
}
?>

worldhero

#18
Спойлер
рад видеть на форуме, людей знающих.
а то половина только выпендриваются )))
[свернуть]
формулировка немного не верная
если существует твой данный конф и по нему уровень меньше уровня чела
или уровень чела больше дефаулта уровня ресета
то делаем рес
а если дефаулт = 350 а по ресу требует 380 то получиться что первое сравнение пропустит а по второму сделает рес :))
<?
if ((isset($reset[$myreset]) and $reset[$myreset] <= $mylevel) or $normal_r_level <= $mylevel)
{
//reset script
}
?>

GrInYa

да :)...я это не ввеол во внимание :)

<?
if ((isset($reset[$myreset]) and $reset[$myreset] <= $mylevel) or (!isset($reset[$myreset]) and $normal_r_level <= $mylevel))
{
//reset script
}
?>