Mário. 154 Posted September 6, 2017 (edited) Até agora não vi nenhumas serverfiles ou mesmo um servidor português onde possas apostar nas guerras de guild. A quest das serverfiles do SG não funcionam, uma vez que buscava valores errados na source (lembrando que elas eram 34k, antes do leak da source). Tinha feito isto a pensar para o meu servidor (poderão reparar na quest) mas como sou fã de partilha, decidi publicar isto. A quest funciona da seguinte maneira: Só podes apostar se tiveres um bilhete (poderá ser editado o item a querer); Podes fazer quantas apostas tu quiseres dependendo do número de bilhetes tiveres; Não podes apostar nas guerras que a tua guild participa; Tens 4 opções de aposta (facilmente editado); Recebes o dobro do que apostaste. A única pessoa a quem dei esta quest foi ao Tiago, dono do GalaxyMT2. A partir de hoje, será de todos vós. Tutorial game/src/questlua_guild.cpp Pesquisar por: int guild_get_reserve_war_table(lua_State * L) Por baixo de todo o código dele, adicionar: int guild_sistema_apostas(lua_State* L) { FBuildLuaGuildWarList f(L); CGuildManager::instance().for_each_war(f); return 1; } int guild_dar_recompensa(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); CGuild* pGuild = ch->GetGuild(); lua_pushnumber(L, (pGuild!=NULL)?pGuild->GetGuildWarWinCount():0); return 1; } Pesquisem por: { "get_reserve_war_table", guild_get_reserve_war_table }, Por baixo, adicionem: { "sistema_apostas", guild_sistema_apostas }, { "dar_recompensa", guild_dar_recompensa }, Agora só precisam de compilar, sem esquecer de adicionarem isto no quest_functions: guild.dar_recompensa guild.sistema_apostas Em baixo forneço-vos a quest com comentários de forma a explicar o que cada código faz de forma a terem uma leitura mais compreensível: --[[ Esta quest foi feita pelo Mário, influenciado pela @SG / @skype: iw0web.69 Como é que isto funciona? Assim que houver uma guerra de guild, um jogador poderá apostar indo no Beleguim da Batalha. Lá, será disponibilizado todas as informações a saber antes de fazer alguma aposta e o que ganharão se a guild que apostou vença. Por norma, os jogadores que pertençam a uma guild que esteja em war, não poderão apostar, juntamente com os que não possuem o bilhete da aposta, de forma a evitar que criem outras contas/personagens para terem lucro com o sistema. ]] quest sistema_apostas begin state start begin --[[ function dar_recompensa() if guild.dar_recompensa < 1 then say_title("LSM2:") say("Parabéns, a guild que apostaste acabou de ganhar a war.") say("Vais receber 100.000.000.000 yang.") pc.changegold(100000000000) end end ]] -- Isto foi um teste ridículo que fiz when guild_war_observer1.chat."Apostar nas Guerras de Guild" or -- Serão os NPCs onde será posto o sistema // neste caso no Beleguim da Batalha. guild_war_observer2.chat."Apostar nas Guerras de Guild" or -- Porquê que são 3? guild_war_observer3.chat."Apostar nas Guerras de Guild" begin -- Porque existem 3 beleguins da batalha, 1 para cada reino. say_title("LSM2:") -- Daqui para baixo, é o que será exibido. say("Para apostares nas guerras de guild,[ENTER]", "precisas de ter conhecimento de certas coisas:") wait() say_title("LSM2:") say("") say("1. Só podes apostar em guerras que estejam a acontecer.") say("") say("2. Só é possível fazeres 1 aposta se tiveres o bilhete para tal.") say("") say("3. Recebes o triplo do que apostas.") say_reward("Ex: Apostar 1.000.000 yang para ganhar 3.000.000") say("") wait() local g = guild.sistema_apostas() local gname_table = {} table.foreachi(g, function(n, p) gname_table[n] = guild.get_name(p[1]).." vs "..guild.get_name(p[2]) end) if table.getn(g) == 0 then -- Caso não exista nenhuma guerra de guilds a acontecer, é isto que será exibido: say_title("LSM2:") say("") say("Não existe nenhuma guerra de guild a decorrer.") else -- Caso contrário, será isto: if pc.count_item(30300) >= 1 then -- Condição em caso de terem o igual ou superior a 1 item 30300 pc.remove_item(30300,1) -- É removido em caso de existir alguma guerra de guild gname_table[table.getn(g)+1] = "Cancelar" -- Cancela a escolha da aposta. local s = select_table(gname_table) -- Aparece as guilds que estejam em guerra, de forma a poderes escolher a aposta if s != table.getn(gname_table) then local primeira_guild = guild.get_name(g[s][1]) -- Primeira guild, que neste caso é o que desafiou a outra local segunda_guild = guild.get_name(g[s][2]) -- A guild que foi desafiada say_title("LSM2:") say("") say("Escolhe em qual das guilds desejas apostar:") local guild_s = select(primeira_guild, segunda_guild, "Cancelar") if guild_s != 3 then -- Apenas em caso do jogador não clicar na terceira opção, que neste caso é o Cancelar local verificar = guild.get_any_war() --[[ Verifica se a guild está em guerra. Perdão por não fazer outra função para isto, mas para além da preguiça, o get_any_war funciona perfeitamente para este caso // questlua_guild.cpp : if (ch->GetGuild()) lua_pushnumber(L, ch->GetGuild()->UnderAnyWar()); ]] if verificar > 1 then -- Os jogadores que pertençam a guild que está em guerra não poderá apostar. pc.give_item2(30300,1) --[[ Porquê isto? Porque o jogador que pertença a guild que ia apostar, ficaria sem o cofre uma vez já tirado na linha 44. Para compensar, é-lhe dado outro cofre. Sim, há formas mais fáceis de fazer isto, mas para a simplicidade da quest, será feita desta forma. ]] say_title("LSM2:") say("Não podes apostar em guerras que a tua guild participa.") return end say_title("LSM2:") say("") say("Quanto é yang queres apostar?") local tabela_aposta_de_yang = {} table.foreachi(guild_war_bet_price_table, -- Os valores para a aposta serão buscados através da função guild_war_bet_price_table que se encontra no questlib.lua function(n, p) tabela_aposta_de_yang[n] = p.." Yang" --[[ Por default, os valores estão: 10000, 30000, 50000, 100000 Mais uma vez repito, podem alterar o valor das apostas no questlib.lua, pesquisando pelo seguinte: guild_war_bet_price_table ]] end) tabela_aposta_de_yang[table.getn(tabela_aposta_de_yang)+1] = "Cancelar" local apostar_guerra = select_table(tabela_aposta_de_yang) if apostar_guerra != table.getn(tabela_aposta_de_yang) then if pc.gold < guild_war_bet_price_table[apostar_guerra] then say_title("LSM2:") say("") say("Não tens esse montante de yang.") say("") else say_title("LSM2:") say("") say("Aconselho a veres a guerra de guild que apostaste[ENTER]", "de forma a controlares a tua aposta.[ENTER]", "Boa sorte!") pc.changegold(-guild_war_bet_price_table[apostar_guerra]) guild.war_bet(g[s][1], g[s][guild_s+1], guild_war_bet_price_table[apostar_guerra]) guild.dar_recompensa() sistema_apostas.dar_recompensa() end -- if pc.gold < guild_war_bet_price_table[apostar_guerra] end -- if apostar_guerra != table.getn(tabela_aposta_de_yang) end -- if guild_s != end -- if s != table.getn(gname_table) else say_title("LSM2:") say("") say("Não tens o bilhete para apostar nas guerras de guild.") say("Volta quando o tiveres.") end -- if table.getn(g) end -- if pc.count_item(30300) end -- when end -- state end -- quest Qualquer dúvida, não hesitem em deixarem um comentário. Edited September 6, 2017 by Mário. (see edit history) 1 3 .тιαgσ, BPinto98, p0w3r0ff and 1 other reacted to this Share this post Link to post Share on other sites
.тιαgσ 624 Posted September 6, 2017 Isto com uma interface a mostrar as guerras activas e a mostrar as opções para as apostas fica espetacular. Obrigado pela partilha Share this post Link to post Share on other sites