SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 06/04/2016, 06:27 AM   #1
Labra
Little Clucker
 
Labra's Avatar
 
Join Date: Nov 2014
Posts: 40
Reputation: 36
Default Lógica para otimização de sistema de casa

Boa.

Pessoal, meu problema é o seguinte; em um sistema de casas que estou desenvolvendo, faço da seguinte forma

Cada casa é salva em um arquivo. Quando o gamemode é iniciado, é percorrido todos os arquivos e carrega as informações preenchendo um enum. "houseinfo[house_id][house_owner]", por exemplo. A questão é que, em todo comando relacionado ao sistema de casas me vejo obrigado em fazer um loop no número total de casas comparando a posição do jogador com a posição de todas as casas até, obviamente, achar a casa em que o jogador se encontra. Encontrando-a, pego o id da casa e começo a trabalhar com as informações.

Minha cabeça me diz que isso pode ser mais otimizado. Afinal, ficar fazendo loops não é algo legal. Que lógica vocês utilizariam para resolver o problema, para evitar ao máximo o uso de loops em todos os comandos? Se é que existe uma alternativa para isso.

Pode parecer bobo, mas o que fiz para otimizar isso é usar um break ao encontrar a casa. É algo bem bobo mesmo, mas em muitos códigos que vi por aí, o desenvolvedor deixa o loop percorrendo mesmo depois de encontrar o que quer.
__________________

Last edited by Lós; 06/04/2016 at 02:46 PM.
Labra is offline   Reply With Quote
Old 06/04/2016, 06:45 AM   #2
PT
Godfather
 
PT's Avatar
 
Join Date: Nov 2012
Location: Europe
Posts: 7,175
Reputation: 803
Default Re: Lógica para otimização de sistema de casa

Usa pick-up?

Poderia converter para um salvamento numa base de dados SQL como por exemplo SQLite aí não teria que salvar cada casa por aquivo...

Mas só vendo o código que você está a usar para ajudar a melhorar.

P.S: coloque no tópico a tag ajuda.
PT is online now   Reply With Quote
Old 06/04/2016, 10:38 AM   #3
Kuddy
High-roller
 
Kuddy's Avatar
 
Join Date: Jun 2011
Location: Brasil / Paraná
Posts: 2,876
Reputation: 313
Default Re: Lógica para otimização de sistema de casa

Pense nas vezes que você vai utilizar estes loops. Será apenas uma vez ao carregar o sistema.

Você realmente se importa se o servidor congelar alguns milesimos de segundo durante o carregamento? Pois é. Não é necessário grandes otimizações nessa parte. Quanto a parte de salvar, você pode ir salvando sempre que houver alterações em determinada casa, provavelmente cada arquivo de casa não terá muita informação, portanto será rápido para editar.
__________________
"CRIANÇÃ GAMER OTAKO QUE SOFREU BULLYING NA ESCOLA E AINDA É BV"
Kuddy is offline   Reply With Quote
Old 06/04/2016, 02:44 PM   #4
Lós
High-roller
 
Lós's Avatar
 
Join Date: Sep 2010
Location: Casterly Rock
Posts: 4,371
Reputation: 511
Default Re: Lógica para otimização de sistema de casa

Da para fazer diversas funções para localizar uma casa.

Você pode utilizar por id, por local, nome do dono e etc... Se o jogador for dono, armazene o id da casa do jogador em uma variável e aí você pode verificar se ele está próximo à casa, assim você não precisa fazer o loop, já que você possui o id da casa. E por aí vai...
Lós is offline   Reply With Quote
Old 06/04/2016, 04:03 PM   #5
Labra
Little Clucker
 
Labra's Avatar
 
Join Date: Nov 2014
Posts: 40
Reputation: 36
Default Re: Lógica para otimização de sistema de casa

Vocês não entenderam nada. Hahahaha.

Eu já faço o loop quando o gamemode inicial preenchendo as enums. O problema é que, por exemplo, quando o jogador digitar o comando "/ComprarCasa" eu preciso, obviamente, saber o id da casa em que ele está e trabalhar com os dados. Aí que é o problema.

"/Comprarcasa" - Loop para descobrir o id da casa que o jogador se encontra
"/Trancarcasa" - Loop para descobrir o id da casa que o jogador se encontra

Queria evitar de fazer esse loops no enum durante os comandos. Há como?

Usar um banco de dados está fora de cogitação.

Lós, mesmo fazendo isso que você falou, vou ter que criar o loop. Afinal, como saberei qual a casa próxima do jogador?
__________________
Labra is offline   Reply With Quote
Old 06/04/2016, 04:11 PM   #6
WooPz
Banned
 
Join Date: Feb 2014
Posts: 177
Reputation: 12
Default Re: Lógica para otimização de sistema de casa

Não, não há como. Uma vez que você necessita iterar a variável para descobrir qual ID a casa pertence. O único jeito de evitar o looping seria utilizando SQL fora isso não existe outra solução.
WooPz is offline   Reply With Quote
Old 06/04/2016, 04:30 PM   #7
bruxo00
High-roller
 
bruxo00's Avatar
 
Join Date: Oct 2012
Location: Portugal
Posts: 1,120
Reputation: 152
Default Re: Lógica para otimização de sistema de casa

Se não quer utilizar loops simples: não faça comando para comprar a casa PRÓXIMA mas sim para comprar a casa com o ID X. Basta criar uma simples label em cada casa a informar o ID da casa. Os jogadores fazem /comprarcasa <id> e compram a casa. Dentro do comando é só preciso verificar se o jogador está perto da casa.

Da forma para comprar a casa PRÓXIMA, se fizer com pickups, há maneira de fazer de uma forma mais optimizada do que loops usando a função OnPlayerPickUpPickup
__________________
RELEASES

[INC] SAMPMailJS
[FS] doxIT!
[GM] Paradise City Roleplay
[TOOL] bAnticheat
[TOOL] Logs Checker
[TUTORIAL] Email confirmation system

www.mp3it.cc · www.diogomartino.com
bruxo00 is offline   Reply With Quote
Old 06/04/2016, 04:47 PM   #8
ForT
Gangsta
 
ForT's Avatar
 
Join Date: Sep 2012
Location: Florianópolis - SC Country: Brazil
Posts: 675
Reputation: 261
Default Re: Lógica para otimização de sistema de casa

Quote:
Originally Posted by bruxo00 View Post
Se não quer utilizar loops simples: não faça comando para comprar a casa PRÓXIMA mas sim para comprar a casa com o ID X. Basta criar uma simples label em cada casa a informar o ID da casa. Os jogadores fazem /comprarcasa <id> e compram a casa. Dentro do comando é só preciso verificar se o jogador está perto da casa.

Da forma para comprar a casa PRÓXIMA, se fizer com pickups, há maneira de fazer de uma forma mais optimizada do que loops usando a função OnPlayerPickUpPickup
Exatamente, o filterscript gl_property (que já vem na pasta do SA-MP) usa esta mesma lógica.
__________________

Novidades em breve


ForT is offline   Reply With Quote
Old 06/04/2016, 05:49 PM   #9
connork
Gangsta
 
connork's Avatar
 
Join Date: May 2013
Posts: 557
Reputation: 46
Default Re: Lógica para otimização de sistema de casa

Eu prefiro utilizar a Streamer com Dynamic Area pra obter o ID da casa que o player está, ou verificar se ele se aproximou de alguma, nunca testei a velocidade, mas o load no servidor é minimo.
__________________
HeavyHost
SA-MP | MTA | VPS no Brasil | VPS Windows | VPS Linux |Hospedagem de Sites | Minecraft | Streaming de Audio | VPS Anti-DDoS
360Gbps DDoS Protection in CA & Layer 7 Mitigation
40Gbps DDoS Protection in USA & Layer 7 Mitigation
100Gbps DDoS Protection in BR & Layer 7 Mitigation
connork is offline   Reply With Quote
Old 06/04/2016, 06:40 PM   #10
Dayvison_
High-roller
 
Dayvison_'s Avatar
 
Join Date: Nov 2013
Posts: 1,307
Reputation: 200
Default Re: Lógica para otimização de sistema de casa

Um loop de 300~3000 voltas a cada rara vez que um player utilizar tal comando não iria gastar mais que 6 ms.

Porém pode usar areas do streamer, ele fará o loop por você, com a velocidade do c++
__________________


Dayvison_ is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Ajuda] Sistema de salario / ajuda otimização BykiLler Português/Portuguese 7 07/11/2015 03:53 AM
[Pedido] Algum Sistema de Casa Que Tenha Venda De Casa Pelo Valor Desejado BrasilVidadeCargaS Português/Portuguese 2 29/05/2015 06:46 PM
[Ajuda] Lógica Sistema VIP ViictorDaay- Português/Portuguese 1 16/03/2015 04:01 AM
[Ajuda] Logica dentro da casa maikons Português/Portuguese 2 29/12/2014 11:09 PM
[Pedido] Logica para contar tempo. PawnoBrasil[xPBx] Português/Portuguese 2 04/11/2013 10:55 PM


All times are GMT. The time now is 06:48 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.