Lуgica para otimizaзгo de sistema de casa -
Labra - 06.04.2016
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.
Re: Lуgica para otimizaзгo de sistema de casa -
PT - 06.04.2016
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.
Re: Lуgica para otimizaзгo de sistema de casa -
Kuddy - 06.04.2016
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.
Re: Lуgica para otimizaзгo de sistema de casa -
Lуs - 06.04.2016
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...
Re: Lуgica para otimizaзгo de sistema de casa -
Labra - 06.04.2016
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?
Re: Lуgica para otimizaзгo de sistema de casa -
WooPz - 06.04.2016
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.
Re: Lуgica para otimizaзгo de sistema de casa -
bruxo00 - 06.04.2016
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
Re: Lуgica para otimizaзгo de sistema de casa -
ForT - 06.04.2016
Quote:
Originally Posted by bruxo00
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.
Re: Lуgica para otimizaзгo de sistema de casa -
connork - 06.04.2016
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.
Re: Lуgica para otimizaзгo de sistema de casa -
Dayvison_ - 06.04.2016
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++
Re: Lуgica para otimizaзгo de sistema de casa -
CaioTJF - 07.04.2016
Eu usei essa maneira no sistema de casas do meu GM (WarCity) e nгo tive problemas.