Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pudinzinho

[] Usando "switch", "if" e "elseif"

Recommended Posts

Bom galera, antes de mais nada eu gostaria de deixar claro que sou completamente iniciante nessa área, portanto me perdoem se eu falar alguma besteira. Bom, eu tenho um servidor de jogo ( Mu Online ), e estou com um problema para fazer o que quero, pois não tenho o conhecimento necessário pra isso...

 

Vou tentar explicar mais ou menos. Existe uma job que muda um valor em uma tabela de acordo com outro valor da mesma tabela. Eis a job:

 

 

update character set faixa = 0 where resets < 51;
update character set faixa = 1 where resets > 50 and resets < 200;
update character set faixa = 2 where resets > 201 and resets < 400;
update character set faixa = 3 where resets >401 and resets < 500;
update character set faixa = 4 where resets > 501

Bom, e de acordo com o numero da faixa (que atualmente vai de 0 a 4), o script abaixo da um valor diferente de pontos ganhos por reset. [O reset funciona da seguinte forma, a pessoa vai "evoluindo" no jogo, e quando ela chega em um level X ela vai no site e reseta, e é somado mais um reset em seu ranking geral. Porém a cada reset, a pessoa ganha mais pontos para serem distribuidos no jogo (quanto mais pontos, mais forte) tento mais ou menos o seguinte calculo: 1 reset = 300 pontos ganhos 2 resets = 600, 3 resets = 900 (sendo somado 300 pontos por reset)]. Logo, cada case do código abaixo, faz com que o jogador receba uma quantidade de pontos diferentes a cada valor de faixa que ele possui, fazendo assim a pessoa demorar mais para chegar na quantidade máxima de pontos do jogo...Logo, quando a pessoa tem mais que 50 resets, ela passa a ganhar 250 pontos ( Somando com os pontos que a pessoa tinha antes...). Existem dois tipos de "pessoas" no servidor, umas que são free e outras que são vip, cada um irá ganhar um valor diferente por reset [se o free ganha 300 pontos por reset. o vip ganha 500 (conforme o valor da "faixa" muda, ele vai diminuindo, mas sempre mantendo o valor do vip acima do free)]

 

 

Eis o script que faz todo esse trabalho, separando as faixas e etc (Ele usa um outro arquivo para pegar algumas informações, chamado config.php)

 

$temgrana = mssql_query("SELECT Money FROM Character WHERE Money >= '".$dindin."' and Name='".$nome."'");
	$temgrana = mssql_num_rows($temgrana);
	$check_md	= mssql_fetch_array(mssql_query("select * from MEMB_INFO where memb___id='".$login."'")); 
	$check_md2	=  mssql_fetch_array(mssql_query("select * from character where name='".$nome."'")); 
	switch($check_md[vip]){ 
	case "0":
	$lvl_reset=$server['level_reset_free'];
	$dindin=$server['dinheiro_cobrado_free'];
	break;
	case "1":
	$lvl_reset=$server['level_reset_vip'];
	$dindin=$server['dinheiro_cobrado_vip'];
	break;
	case "2":
	$lvl_reset=$server['level_reset_vip'];
	$dindin=$server['dinheiro_cobrado_vip'];
	break;

	}
	switch($check_md2[faixa]){ 
	case "0": 
	$pt_dps_reset=$server['pt_dps_reset_1'];
	$pontos_reset=$server['pontos_por_reset_1'];
	$comp=$server['complementar_1'];
	break;
	
	case "1": 
	$pt_dps_reset=$server['pt_dps_reset_2'];
	$pontos_reset=$server['pontos_por_reset_2'];
	$comp=$server['complementar_2'];
	break;
	
	case "2": 
	$pt_dps_reset=$server['pt_dps_reset_3'];
	$pontos_reset=$server['pontos_por_reset_3'];
	$comp=$server['complementar_3'];
	break;
	
	case "3": 
	$pt_dps_reset=$server['pt_dps_reset_4'];
	$pontos_reset=$server['pontos_por_reset_4'];
	$comp=$server['complementar_4'];
	break;
	
	case "4": 
	$pt_dps_reset=$server['pt_dps_reset_5'];
	$pontos_reset=$server['pontos_por_reset_5'];
	$comp=$server['complementar_5'];
	break;
	}
	$rrlevel=mssql_fetch_row(mssql_query("select cLevel,Money,Resets from character where Name='".$nome."'"));
	if ($rrlevel['0'] < $lvl_reset) {
	die("Você ".$nome." Não Esta no lvl ".$lvl_reset."!"); $ee=1; }
	$rrstat=mssql_result(mssql_query("select connectstat from memb_stat where memb___id='".$login."'"), 0, 0);
	if ($rrstat == 1) {
	die("Deslogue-se do Jogo!"); $ee=1; }
	if ($rrlevel[1] < $dindin){ 
	die("Cobra-se uma taxa de ".$dindin." seu zen  menor que isto!(".$rrlevel['1'].")"); $ee=1;
	}

(Não está completo ai, só coloquei o que eu acho que será modificado)

 

 

Eis o meu problema, como vcs podem ver Ele para usuarios free funciona perfeitamente, mas eu gostaria de por um if, elseif ou algo parecido para que ele pudesse conferir o vip = 1 (

if($check_md['vip'] == 0))
ou algo parecido com isso, que fizesse da seguinte forma: Se vip for igual a 1, o switch será diferente do de baixo ( um switch vai verificar qual é o numero da faixa, e se for vip esse valor mudará

 

case "0": 
	$pt_dps_reset=$server['pt_dps_reset_1'];
	$pontos_reset=$server['pontos_por_reset_1'];
	$comp=$server['complementar_1'];
	break;
Para:

 

case "0": 
	$pt_dps_reset=$server['pt_dps_reset_6'];
	$pontos_reset=$server['pontos_por_reset_6'];
	$comp=$server['complementar_6'];
	break;
Sendo que não sei se é possível fazer isso, é mais ou menos isso aqui(como eu não sei absolutamente nada, estou colocando só como exemplo)

 

 

$check_md	= mssql_fetch_array(mssql_query("select * from MEMB_INFO where memb___id='".$login."'")); 
	$check_md2	=  mssql_fetch_array(mssql_query("select * from character where name='".$nome."'")); 
	switch($check_md[vip]){ 
	case "0":
	$lvl_reset=$server['level_reset_free'];
	$dindin=$server['dinheiro_cobrado_free'];
	break;
	case "1":
	$lvl_reset=$server['level_reset_vip'];
	$dindin=$server['dinheiro_cobrado_vip'];
	break;
	}
	
		if($check_md['vip'] == 1){ 
		case "0": 
	$pt_dps_reset=$server['pt_dps_reset_6'];
	$pontos_reset=$server['pontos_por_reset_6'];
	$comp=$server['complementar_6'];
	break;
	
	case "1": 
	$pt_dps_reset=$server['pt_dps_reset_7'];
	$pontos_reset=$server['pontos_por_reset_7'];
	$comp=$server['complementar_7'];
	break;
	
	case "2": 
	$pt_dps_reset=$server['pt_dps_reset_8'];
	$pontos_reset=$server['pontos_por_reset_8'];
	$comp=$server['complementar_8'];
	break;
	
	case "3": 
	$pt_dps_reset=$server['pt_dps_reset_9'];
	$pontos_reset=$server['pontos_por_reset_9'];
	$comp=$server['complementar_9'];
	break;
	
	case "4": 
	$pt_dps_reset=$server['pt_dps_reset_10'];
	$pontos_reset=$server['pontos_por_reset_10'];
	$comp=$server['complementar_10'];
	break;
	}

	switch($check_md2[faixa]){ 
	case "0": 
	$pt_dps_reset=$server['pt_dps_reset_1'];
	$pontos_reset=$server['pontos_por_reset_1'];
	$comp=$server['complementar_1'];
	break;
	
	case "1": 
	$pt_dps_reset=$server['pt_dps_reset_2'];
	$pontos_reset=$server['pontos_por_reset_2'];
	$comp=$server['complementar_2'];
	break;
	
	case "2": 
	$pt_dps_reset=$server['pt_dps_reset_3'];
	$pontos_reset=$server['pontos_por_reset_3'];
	$comp=$server['complementar_3'];
	break;
	
	case "3": 
	$pt_dps_reset=$server['pt_dps_reset_4'];
	$pontos_reset=$server['pontos_por_reset_4'];
	$comp=$server['complementar_4'];
	break;
	
	case "4": 
	$pt_dps_reset=$server['pt_dps_reset_5'];
	$pontos_reset=$server['pontos_por_reset_5'];
	$comp=$server['complementar_5'];
	break;
	}

Bom, sei que está errado, mas espero que possam me ajudar, pois preciso MUITO disso. Caso alguem não entenda (é bem provável :S) Eu tento explicar de outra forma.

 

Desde já, grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom William, eu quero apenas fazer uma função que diferencie os vips dos frees, sendo que independente do usuario ser free ou vip, a faixa (dos cases) será a mesma, o que vai mudar apenas sera o q esta nas cases.

case "4": 
	$pt_dps_reset=$server['pt_dps_reset_5'];
	$pontos_reset=$server['pontos_por_reset_5'];
	$comp=$server['complementar_5'];
	break;
	}

Espero q consiga entender, desculpe pela embolação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu particularmente continuo sem entender, pra que aquele tamanho de código lá em cima ?

 

estás trabalhando com site de muonline não é ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe realmente a embolação. Eu só gostaria de saber se tem como fazer mais ou menos isso...

 

Se vip for igual a 0

switch[faixa]

case 0

função 1

case 1

função 2

 

Se vip for igual a 1

switch[faixa]

case 0

função 3

case 1

função 4´

 

 

 

 

é mais ou menos isso, isso tudo é para fazer o reset ser progressivo:

 

Pontos por reset para contas VIP: - 1 a 10 Resets = 600 Pontos

- 11 a 100 Resets = 250 Pontos Ganhos por reset

- 101 a 200 Resets = 200 Pontos ||

- 201 a 300 Resets = 150 Pontos ||

- 301 Resets em diante = 50 Pontos ||

 

Pontos por reset para contas não VIP:

- 1 a 10 Resets = 350 Pontos

- 11 a 100 Resets = 150 Pontos

- 101 a 200 Resets = 120 Pontos

- 201 a 300 Resets = 100 Pontos

- 301 Resets em diante = 20 Pontos

 

 

 

Desculpe pela dificuldade de expressão =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

brother trabalho com site de mu online, o mais facil para você fazer isso é declarar tudo na config.php

no caso assim: (exemplo)

 

// Free

$reset_1_a_50 = 300;

 

//Vip

$vip_1_a_50 = 300;

 

 

depois no php do reset cria a verificação do vip assim:

 

$sql_name2_check = "SELECT memb___id FROM memb_info WHERE memb___id='$login' and vip=1";

$sql_name2_check = mssql_query($sql_name2_check);

$name2_check = mssql_num_rows($sql_name2_check);

 

e o seguinte declara e puxa as infos para vip e não vip da config.:

 

if ($name2_check == 0) {

$pontos = $reset_1_a_50;

}

 

if ($name2_check > 0) {

$pontos = $vip_1_a_50;

}

 

e por fim qdo reseta: manda ele fze o Update da coluna leveluppoints = $pontos,

a lógica é exatamente essa passei qse tdo so você pensar um pouco.

 

Flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, obrigado Douglas, mas como eu falei no tópico eu sou muito menos que iniciante, porem entendi o que você quis dizer, sendo que (posso estar doido) mas eu não achei ali, alguma formula que conferisse a quantidade de resets que o char tem, mais ou menos isso

 

if ($check_md['Resets'] <= '50')

 

E talvez pela minha falta de esperiencia eu esteja achando que do outro modo seria mais pratico, pois existe um valor que tem que ser colocado tambem, pq 50 * 300 é bem mais que 51 * 250, teria que haver um valor para compensar...No caso eu só queria, se possivel, dividir as cases...Elas continuariam indo de 0 a 4, mas com as funções dentro delas sendo diferentes para Vip e Free.

 

Mais uma vez peço desculpas pela ignorancia

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, o meu msn é thalespanda@msn.com, eu sinceramente espero não estar incomodando mais do que já incomodei!

 

Grato!

 

 

 

-----------------Edit-----------------

 

Só atualizando o meu msn que postei errado :S, desculpe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.