Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/03/15 em todas áreas
-
Evento de Scripting?
Caronte e um outro reagiu a Night Wolf por um tópico no fórum
avaliar complexidade é uma coisa complicada, pessoas dizem que algoritmos com complexidade polinomial são melhores do que algoritmos exponenciais mas isso nem sempre é verdade. Para n baixo 2^n < n^1000000000000. Oque eu fiz pra avaliar os códigos quando fui jurado em um concurso aí foi rodar os.clock pra ver a diferença de tempo de processamento entre o server rodando solo e rodando com o script. Dá uma idéia bem melhor do quão bom ou quão ruim o script está feito. Sem falar que muitos aspectos vc percebe só de ler o código, mas claro que existem diversas formas de fazer uma mesma coisa então acho que oque mais vale é se funciona, se não tem bugs, e se tá bonito in game... afinal, player não vê código e os scripts no fundo são feitos pros membros do seu servidor.2 pontos -
[10.82] Wind-Global | Roshamuul & Oramond | Grimvale | Achievements | Hot Cuisine |
TenT3n e um outro reagiu a andrekinas por um tópico no fórum
Wind-Global é um servidor real map, serio e de qualidade, aonde você jogador pode investir seu tempo sem se preocupar com resets, um servidor que respeita o jogador, além dessa caracteristica, temos como objetivo principal trazer muita diversão há vocês, então nao perca tempo, você acabou de achar um servidor sério, com uma equipe séria e dedicada, que estará trabalhando dia após dia para transformar deste, um dos maiores servidor de Open Tibia Server. As rates do Wind-Global foram bem ajustadas para que os jogadores tenha uma experiencia em nivel superior a qualquer outro servidor, com elementos desafiadores para alcançar novos niveis e completarem quest, outfits e montarias que foram mantidas. Wind-Global e um servidor real map global, O Objetivo e funcionar como um servidor de Tibia alternativo para aqueles jogadores que estão a procura de um jogo mais casual independente do tempo de jogo. IP - wind-global.net Client - 10.82 Port - 7171 Location - Canada RAM - 32GB Internet Connection - 250 Mbps Bandwidth Uptime - 24/7 (Com uma exceção para o server save e atualizações) 100% Dedicado Proteção DDoS Warzones I,II e III Reward Chest System Roshamuul (Prison, Dark Grounds, Ancient Dream Mine, Deep Cistern) 100% Oramond (Glooth Factory, Seacrest Grounds, Hero of Rathlton Quest) 100% Grimvale and ALL new 10.8 respawns Todas as Raids do global de forma automática Equipe Ativa e Profissional Loot com base em estatisticas do Tibia Wiki Sistema Cast System (!cast on / !cast off) Questlogs em 95% das quests Eventos frequentes feitos pela equipe Raids Automaticas Runas Finitas Hot Cuisine (Jean Pierre Segunda e Sexta) Sistema de Achievements Umbral Creation Nenhum tratamento VIP / Shop Offer Sistema de Atendimento via Ticket HelpDesk Vocations balanceadas Recompense Level Taming System 100% RL Experience Shared (bonus) 2 players = 30% 3 players = 60% +4 players = 100% Independente de vocation. E muito mais novidades! Entre em nosso site e comprove que aqui é seu lugar! Estamos ansiosos para conhecer os jogadores que vão jogar no Wind-Global - se voce quiser entrar em contato conosco fora do servidor, voce pode faze-lo atraves do Forum, HelpDesk Tickets, Facebook. Bem vindos ao Wind-Global! Team Wind-Global.net2 pontos -
Simples, vai na pasta actions/scripts crie um arquivo .lua renomeie para questransform Cole isto dentro: -- Script criada por Yan Liima - Night. function onUse(cid, item, frompos, item2, topos) if getPlayerLevel(cid) >= 60 then -- level para pegar a transform if item.uid == 8398 then doPlayerSendTextMessage(cid,22,"Você acabou de virar Zaiko!.") -- mensagem apos pegar a transform doPlayerSetVocation(cid,IDVOCATION) -- ID da transformação local outfit = {lookType = IDOUTFIT} -- ID da outfit (roupa) doCreatureChangeOutfit(cid, outfit) setPlayerStorageValue(cid,50022,1) else doPlayerSendTextMessage(cid,22,"Você já é Zaiko!") -- caso você ja fez a quest end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Desculpe você precisa ter level 60 para pegar sua vocação.") -- Mensagens... doPlayerSendCancel(cid,'Você não tem level suficiente.') end return 1 end em actions.xml cole isto: <action uniqueid="8398" script="questransform.lua" /> vai no seu mapa editor, vai no bau da quest e coloca o uniqueid: 8398 Créditos Yan Liima2 pontos
-
[Pedido] Area anti blood
4sharedddd e um outro reagiu a zipter98 por uma questão
data/creaturescripts/scripts Código: local config = { blood_itemid = xxx, --ID do item correspondente ao sangue. area_coordinates = {fromPos = {x = x, y = y, z = z}, toPos = {x = x, y = y, z = z}} --(fromPos - posição superior esquerda da área do minigame, toPos = posição inferior direita) } function onStatsChange(cid, attacker, type, combat, value) local player_pos = getThingPos(cid) if isPlayer(cid) and isInArea(player_pos, config.area_coordinates.fromPos, config.area_coordinates.toPos) and type == STATSCHANGE_HEALTHLOSS then addEvent(function() local tile_item = getTileItemById(player_pos, config.blood_itemid).uid if tile_item > 0 then doRemoveItem(tile_item) end end, 5) end return true end Tag: <event type="statschange" name="remove_blood" event="script" value="nome_do_arquivo.lua"/> Não se esqueça de registrar o evento em login.lua.2 pontos -
Evento de Scripting? Criamos essa pesquisa para saber quantas pessoas estão dispostas a participar do concurso e de que forma isso possa ser divertido e dinâmico para todos. Pretendemos criar um evento que proporcione tempo razoável de participação e aprendizado dentro de um conceito que permita a participação de todos. Por favor, deixe sua sugestão e o seu voto para que possamos criar algo bem legal para você.1 ponto
-
Você só precisa liberar as portas: 7171,7172,80,4499. Tudo TCP Pelo o que você disse não da pros players entrar no teu site e no teu servidor certo? ou da pra entrar no site mais não no servidor? Se der para entrar no site e não der pra entrar no servidor basta configura as linhas que o Gabriel disse. Se não esta dando pra entrar em nenhum lugar o IP que você passou para os seus amigos esta errado, talvez você passou o 127.0.0.1 (IP usado para uma pessoa só, o hostiador do servidor) rsrs Ou talvez você usa internet compartilhada, não é faço por servidor online com internet compartilhada (wi-fi,via radio etc) Bom eu não sei exatamente o que esta apassar por ai, mais manda um convite para mim no skype que estarei ajudando você sem problemas... Antes tente desativar o Firewall do Windows, uma vez ninguém conseguiu entrar no meu servidor e eu desativei e funcionou. Painel de Controle\Todos os Itens do Painel de Controle\Firewall do Windows e vai em: Ativar ou Desativar o Firewall do Windows. E desative os dois. OBS: Se for por hamachi os jogadores precisam entrar na sua rede...1 ponto
-
Evento de Scripting?
Administrador reagiu a Caronte por um tópico no fórum
Sim, eu também pensei em ver o consumo de memória. coisas como um return no lugar certo faz o script parar de rodar se não necessário e economiza um pouquinho, mesmo que não tão notável... Gostaria muito de que você fosse um dos avaliadores, sem compromisso (você pode dar o fora quando quiser). e vou gostar muito se ver bastante gente participando e que o concurso gere conteúdo para o fórum. por isso, estou sendo bastante democrático. Post Scriptum: Esse não tão notável, pode ser notado a longo prazo1 ponto -
[Pedido] Boa formula para dano físico
Caronte reagiu a Night Wolf por uma questão
não tenta bolar uma fórmula grande como essa do nada... "tcharam! (skill * 1.5 + level/2) * 3" não é assim q funciona. Começa por partes e aí vc vai adicionando outros fatores. Nesse tópico aqui http://www.xtibia.com/forum/topic/237246-skill-fist-ter-influencia-no-dano-de-certa-magia/eu falei um pouco sobre como bolar boas fórmulas, dá uma lida e vê se te ajuda.1 ponto -
[Pedido] monstro que se multiplica com x de vida
Caronte reagiu a Night Wolf por uma questão
eu tive esse problema quando criei a volatile spiderling. O tibia tem uma função chamada getClosestFreeTile que retorna a posição livre mais próxima pra sumonar o bixo. Infelizmente para monstros trapados, ainda irá retornar esse erro então a forma de resolver isso é fazer um for por todas as posições em volta do player no range que vc quiser (gosto de usar range 2) monstro é o 'o' e 'x' são as posições que irei contemplar. xxx xxxxx xxOxx xxxxx xxx e aí vc checa se tem uma posição livre, se tiver você cria o monstro lá.. se não tiver nenhuma vc não faz nada. Com essa simples checagem vc já arruma os erros da distro pois impede o script de tentar criar monstros em posições q não são elegíveis de se criar um monstro1 ponto -
[10.82] Wind-Global | Roshamuul & Oramond | Grimvale | Achievements | Hot Cuisine |
andrekinas reagiu a TenT3n por um tópico no fórum
Depois de muito tempo de trabalho, finalmente! Esse servidor tem futuro, para aqueles que apreciam um bom tibia global e suas caracteristicas originais (o que está bem dificil de achar por ai) vai amar o Wind-Global! Muito ancioso para a abertura!1 ponto -
[10.82] Wind-Global | Roshamuul & Oramond | Grimvale | Achievements | Hot Cuisine |
andrekinas reagiu a Administrador por um tópico no fórum
Grande parceiro do xTibia, publicado no portal. Joguem galera! Ta chegando o dia da abertura!1 ponto -
[ACTION] Summon Scroll
Administrador reagiu a Caronte por um tópico no fórum
Boa mano, eu ia fazer assim, só que me esqueci do Table concat, tava tentando o string.explode kkkk.... Vou dar uma revisada depois... @, Atualizei... Versão stepIn: function onStepIn(cid, item, position) local cont = getItemAttribute(item.uid, "text") -- nao precisa mexer local summons = {"demon", "dragon", "dog", "cat", "rotworm", "morgaroth", "cyclops", "dragon lord", "son of verminor", "wolf"} -- monstros disponiveis function Summon(entity) if position.x == 65535 and position.y == 64 then doCreateMonster(entity, getThingPos(cid)) doRemoveItem(item.uid) doSendMagicEffect(getThingPos(cid), CONST_ME_FIREWORK_YELLOW) return true else doCreateMonster(entity, position) doRemoveItem(item.uid) doSendMagicEffect(position, CONST_ME_FIREWORK_YELLOW) return true end return true end if cont ~= nil then local monster = table.concat(cont:exp("%s"), " ") if isInArray(summons, monster) then Summon(monster) return true else doPlayerSendCancel(cid, "You can't summon this monster!") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) end end end function string.exp(e, sep) local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end) return result end1 ponto -
1 ponto
-
Saint Seiya o Despertar da Nova era
Administrador reagiu a deadkiller por um tópico no fórum
Índice: └ INTRODUÇÃO └ Client └ Personagens └ Mapa └ Armaduras / Itens no Game └ Coliseu └ Andamento └ Equipe INTRODUÇÃO • Saint Seiya O Despertar Da Nova Era Será um jogo com grande fidelidade a história de Cavaleiros do Zodiaco, nossa ideia é resgatar as essências que mais destacaram o Tibia dos demais jogos, o RPG e a Fantástica Jogabilidade, visando sempre a diversão,RPG, missões em grupo e muito mais. CLIENT Personagens • O Jogo contará em sua Versão Beta Os 5 Principais Personagens que todos Nós conhecemos do Anime. Todos eles se destacarão pelas diferenças, ou seja serão destinguidos não apenas pela Outfit, e sim por todo o contexto da armadura, Shun Por exemplo, alem de ser extremamente forte, suas magias de proteção, que o destaca dos demais, estarão presentes no Game. Cavaleiro de Fênix Cavaleiro de Pégaso Cavaleiro de Dragão Cavaleiro de Andrômeda Cavaleiro de Cisne Mapa • O Mapa será 100% próprio, mantendo a originalidade do Saint Seiya, com gráficos bonitos ( baseados nos que se apresentam nas atuais versões do Tibia), porém totalmente Próprio e mantendo um aspecto de RPG bem claro e Marcante. Tal mapa será baseado em cidades e vilas antigas encontradas no anime clássico e no Lost Canvas, como a vila de Rodorio por exemplo. Por se tratar de algo antigo ( Medieval, assim por dizer ), deixará o jogo mais " realista " combinando com a jogabilidade. Armaduras / Itens no Game • A Idéia Original seria fazer diferentes armaduras para que ao decorrer do jogo, o jogador recolhesse peças para formar uma armadura Completa, mas sabemos que o que move jogadores, são os desafios, as missões em grupo e o Famoso " PVP ", é por isso que será pré-estabelecido as Vocações, que ao decorrer do jogo o Player irá encontrar diferentes maneiras de " Melhorar sua Armadura " transformando a antiga, em uma nova, ganhando habilidades novas e várias outras coisas que não irei dizer seus safadinhos Itens dentro do jogo serão praticamente parecidos com os do Tibia, a alteração é que Usarão apenas " LUVAS " como equipamento de ataque, pois nenhum deles usam espadas/machados, e também os Escudos darão Lugares a " Caixas de Armaduras / Itens dos Deuses " para diferenciar o jogo do tradicional TIBIA. Coliseu • O Coliseu era um dos Lugares que os cavaleiros batalharam pela armadura de ouro de Sagitário, e claro, não poderíamos deixar isto de fora, mas aí vocês me perguntam, Se já nasceremos com as vocações pelo o que batalharemos? Ouro? Itens? NÃO! Vocês batalharão pela ARMADURA DE OURO ! Isso mesmo. Todas as versões possuem sua Armadura de Ouro: Pégaso = Sagitário, Cisne = Aquário, entre Outros. Mas o que essas armaduras se destacarão além de Poder e Magias Exclusivas? Terão apenas UMA armadura de cada, Os eventos serão semanais, então os players que obterem as armaduras Terão a Armadura de Ouro por apenas 7 Dias até o próximo Torneio no Coliseu, onde todos serão Iguais e que vença o melhor lutador. Andamento • O Andamento do Jogo está Muito bem! A equipe está se esforçando para terminar o mais rápido Possível, Todos os dias Postamos as Novidades em nossa Página no Face. CLIQUE AQUI PARA IR! LANÇAMENTO DO JOGO: JANEIRO DE 2016 EQUIPE ● A equipe está Completa, mas possuimos vaga, Caso interesse, só acelerará o andamento do Jogo, mas independentemente, será Lançado em JANEIRO! ( / ) Mapper ( / ) Scripter/Programador: Há vaga, SE INTERESSAR MANDAR MENSAGEM NA PÁGINA! ( / / ) Spriters: Há vaga, SE INTERESSAR MANDAR MENSAGEM NA PÁGINA!1 ponto -
Evento de Scripting?
Luga03 reagiu a Administrador por um tópico no fórum
Minha sugestão: Ao iniciar o evento, coloca-se uma frase no tópico, exemplo: "No topo da montanha, dois gigantes circulavam uma pedra estranha que havia lá caído. Surpreendentemente, os gigantes foram transformados pela magia da pedra misteriosa" Os participantes deveriam fazer os scripts seguindo o conceito entendido. A frase é muito subjetiva e contém enigmas, portanto, seria avaliado a criatividade e a técnica de cada script, por mais de 1 jurado.1 ponto -
[AJUDA] RME Unsupported Client Version (8)
Nickbhz reagiu a Administrador por uma questão
Certo, @@allantim. Vá em File -> Preferences -> Client Version: Desmarque o campo Check File Signatures Selecione a versão 8.60 Selecione o diretório do protocolo 8.60 (client que eu passei) Aplique, de OK e feche o editor. Abra novamente e abra o mapa ou importe.1 ponto -
[Resolvido] Qual melhor base para começar?
roriscrave reagiu a Administrador por uma questão
Confere ai: http://www.xtibia.com/forum/topic/233829-pacotao-otservers-76/ Também recomendo este: http://www.xtibia.com/forum/topic/232996-76-tibia-old-full/1 ponto -
Mudança de Nick
jvcasarin reagiu a Administrador por um tópico no fórum
Resolvido, só não posso trocar o login por causa desse outro membro.1 ponto -
Seria possivel abrir trade atacando o npc? [ideia no post]
4sharedddd reagiu a Caronte por uma questão
Não padrão do TFS 0.4 eu acho.1 ponto -
Mudança de Nick
jvcasarin reagiu a Administrador por um tópico no fórum
O sistema não permite =/ Se desejar outro nome é só dizer.1 ponto -
Como criar seus próprios monstros personalizados.
Luga03 reagiu a Marco Oliveira por um tópico no fórum
Neste tutorial vou ensinar como criar seus próprios monstros personalizados para seu servidores OTSERV. Comece fazendo o download da versão mais recente do Notepad ++ Em seguida, você deve criar um arquivo xml e nomeá-lo com o nome do monstro, eu irei utilizar "King Kong" Clique com o botão esquerdo no arquivo e clique em Editar com o Notepad ++ em seguida, começar adicionando: <?xml version="1.0" encoding="UTF-8"?> Depois: <monster name="King kong" nameDescription="a King kong" race="blood" experience="10000" speed="500" manacost="200"> <health now="500000" max="500000"/> Monster name: Nome do Monstro nameDescription: Você deve usar ou não como exemplo o "You see a King kong" Race: Tudo o que sei sobre ele é que seu sangue / mortos-vivos. Experience: Experiencia por matar o monstro. Speed: Velocidade do monstro. Manacost: Custo de mana para sumonar a criatura. Healt now: vida da criatura ao ser summonada (criada no mapa) Max: vida máxima da criatura Agora: <look type="x" corpse="x"/> <targetchange interval="x" chance="0"/> <strategy attack="100" defense="0"/> Look Type: Outfit da criatura. Corpse: Corpo da criatura quando morto. Targetchange interval: Intervalo em que o monstro muda de alvo. Defense: Defesa da criatura. Depois: <flags> <flag summonable="x"/> <flag attackable="x"/> <flag hostile="x"/> <flag illusionable="x"/> <flag convinceable="x"/> <flag pushable="x"/> <flag canpushitems="x"/> <flag canpushcreatures="x"/> <flag targetdistance="x"/> <flag staticattack="x"/> <flag runonhealth="x"/> </flags> Em todos eles "1" (true) é para sim e "0" (false) é para não. Agora, deixe-me explicar cada um deles flag summonable="x" - A criatura pode ser sumonada ? flag attackable="x" - O Monstro pode ser atacado ? flag hostile="x" - A Criatura é Hostil ? flag illusionable="x" - Pode ser usado Utevo Res Ina ? flag convincible="x" - As pessoas podem coruja-la a partir de uma runa ? flag pushable="x" - A criatura pode ser puxada ? flag canpushitems="x - A criatura puxa itens ? flag canpushcreatures="x" - A criatura puxa outras criaturas ? flag targetdistance="x" - deve ser um número que é o espaço entre o alvo e criatura. 1 = lado do alvo, 5 = 4 sqms distância, etc flag runonhealth="x" a criatura vai correr do player com X de vida, se colocar 500, quando a criatura tiver 500 de vida, ele vai correr do jogador. Agora: <attacks> <attack name="x" interval="x" skill="x" attack="x"/> <attack name="x" interval="x" chance="x" range="x" min="-x" max="-x"> <attribute key="shootEffect" value="x"/> <attack name="x" interval="x" chance="x" range="x" radius="x" target="x" min="-x" max="-x"> <attribute key="shootEffect" value="x"/> <attribute key="areaEffect" value="x"/> </attack> </attacks> Attack name: eles são muito "use outros arquivos de monstro para saber sobre eles". Interval: Quantas vezes irá o ATK do monstro u "Lembre-se é contado em milisegundos" Skill: it is skill like sword fighting "it increases the atk rate" Attack: Por exemplo torná-lo como 10 a escala do monstro será de 10. Attack name: Tipo de ataque Chance: Chance de ataque Range: Ataque contados em SQM. Min: Dano mínimo causado "importante" e lembre-se de adicionar - antes que o dano como -10. Max: Danos máximo causado "importante" mesmo aqui lembrar acrescentando - antes que o dano como -20. AreaEffect: o efeito se vc quiser fazê-lo disparar chamá-lo de área de fogo entre o "" "Lembre-se que o nome de ataque deve ser a incêndios, se u quer que ele faça um atk fogo e definir o intervalo e raio como outros ATKS. attribute key="shootEffect": O efeito usado no ataque é como uma lança ou parafuso ou pequena pedra ou um incêndio ou algo. value="x": O item utilizado no shooteffect Depois: <defenses armor="x" defense="x"/> <defense name="x" interval="x" chance="x" speedchange="x" duration="x"> <attribute key="areaEffect" value="x"/> </defense> </defenses> Defenses armor: sua defesa armadura como 10 ou 12 ou assim por diante Defense: É como a armadura ur blindagem 20 ou assim por diante Agora: <elements> <element energyPercent="x"/> <element holyPercent="x"/> <element earthPercent="x"/> <element deathPercent="x"/> </elements> Todos esses são as % retirado do Energy/holy/earth/death se vc fez, por exemplo 10, então vai demorar 10% menos dano do ataque X se tornou u -10, então vai demorar 10% mais dano do X. Depois: <voices interval="x" chance="x"> <voice sentence="X" yell="x"/> </voices> vozes interval/chance: Quantas vezes ele vai dizer sua fala! Agora: <loot> <item id="x" countmax="x" chance="x"/> <item id="x" chance="x"/> <item id="x" chance="x"> <inside> <item id="x" chance="x"/> </inside> </item> </loot> </monster> Item id: item que irá dropar. Count max: Quantidade máxima que irá dropar. Chance: chance de drop do item. <inside> <item id="x" chance="x"/> </inside> Itens que vem dentro da bag, mesma configuração da de cima.1 ponto -
1 ponto
-
Mapa Global
leonardo macedo reagiu a Administrador por uma questão
http://www.xtibia.com/forum/topic/233223-1082-vanaheim-global-open-source-tfs-12/ Link direto: http://www.mediafire.com/download/cc8o8h0ah45kqvx/world.zip1 ponto -
Ajuda characters.php ( Reset)
Nosifero reagiu a MatheusGlad por uma questão
<?PHP $name = stripslashes(ucwords(strtolower(trim($_REQUEST['name'])))); if(empty($name)) { $main_content .= 'Here you can get detailed information about a certain player on '.$config['server']['serverName'].'.<BR> <FORM ACTION="?subtopic=characters" METHOD=post><TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>Search Character</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'"><TABLE BORDER=0 CELLPADDING=1><TR><TD>Name:</TD><TD><INPUT NAME="name" VALUE=""SIZE=29 MAXLENGTH=29></TD><TD><INPUT TYPE=image NAME="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18></TD></TR></TABLE></TD></TR></TABLE></FORM>'; } else { if(check_name($name)) { $player = $ots->createObject('Player'); $player->find($name); if($player->isLoaded()) { $account = $player->getAccount(); $main_content .= '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%><TR><TD><IMG SRC="'.$layout_name.'/images/general/blank.gif" WIDTH=10 HEIGHT=1 BORDER=0></TD><TD><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['site']['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Character Information</B></TD></TR>'; if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=20%>Name:</TD><TD><font color="'; $main_content .= ($player->isOnline()) ? 'green' : 'red'; $main_content .= '"><b>'.$player->getName().'</b></font>'; if($player->isDeleted()) $main_content .= '<font color="red"> [DELETED]</font>'; if($player->isNameLocked()) $main_content .= '<font color="red"> [NAMELOCK]</font>'; $main_content .= '</TD></TR>'; if($player->getOldName()) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; if($player->isNameLocked()) $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Proposition:</TD><TD>'.$player->getOldName().'</TD></TR>'; else $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Old name:</TD><TD>'.$player->getOldName().'</TD></TR>'; } // BEGIN Position Showing *** Fixed by jerryb1988 from otfans.net $group = $player->getGroup(); if ($group == 2){$group_name = 'Tutor';} if ($group == 3){$group_name = 'Senior Tutor';} if ($group == 4){$group_name = 'Gamemaster';} if ($group == 5){$group_name = 'Community Manager';} if ($group == 6){$group_name = 'GOD';} if($group != 1) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Position:</TD><TD>'.$group_name.'</TD></TR>'; } // END Position Showing if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Sex:</TD><TD>'; $main_content .= ($player->getSex() == 0) ? 'female' : 'male'; $main_content .= '</TD></TR>'; if($config['site']['show_marriage_info']) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Marital status:</TD><TD>'; $marriage = new OTS_Player(); $marriage->load($player->getMarriage()); if($marriage->isLoaded()) $main_content .= 'married to <a href="?subtopic=characters&name='.urlencode($marriage->getName()).'"><b>'.$marriage->getName().'</b></a></TD></TR>'; else $main_content .= 'single</TD></TR>'; } if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Profession:</TD><TD>'.$vocation_name[$player->getWorld()][$player->getPromotion()][$player->getVocation()].'</TD></TR>'; if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Level:</TD><TD>'.$player->getLevel().'</TD></TR>'; if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>World:</TD><TD>'.$config['site']['worlds'][$player->getWorld()].'</TD></TR>'; if(!empty($towns_list[$player->getWorld()][$player->getTownId()])) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Residence:</TD><TD>'.$towns_list[$player->getWorld()][$player->getTownId()].'</TD></TR>'; if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Balance:</TD><TD>'.$player->getBalance().' Gold Coins.</TD></TR>'; } $rank_of_player = $player->getRank(); if(!empty($rank_of_player)) { { $guild_id = $rank_of_player->getGuild()->getId(); $guild_name = $rank_of_player->getGuild()->getName(); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Guild Membership:</TD><TD>'.$rank_of_player->getName().' of the <a href="?subtopic=guilds&action=show&guild='.$guild_id.'">'.$guild_name.'</a></TD></TR>'; } } if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $lastlogin = $player->getLastLogin(); if(empty($lastlogin)) $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Last login:</TD><TD>Never logged in.</TD></TR>'; else $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Last login:</TD><TD>'.date("j F Y, g:i a", $lastlogin).'</TD></TR>'; if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; if($config['site']['show_creationdate'] && $player->getCreated()) { $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Created:</TD><TD>'.date("j F Y, g:i a", $player->getCreated()).'</TD></TR>'; } /*Vip Status*/ if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Vip Status:</TD><TD>'; $main_content .= ($account->getPlayerVipTime()) ? '<b><font color="green">Vip Account</font></b>' : '<b><font color="red">Not Vip Account</font></b>'; if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>'; $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch(); if($vip == false) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } //Outfit shower by Pening edited by loleslav if($config['site']['show_outfit']) { $id = $player->getCustomField("id"); $main_content .= '<TD BGCOLOR="'.$config['site']['darkborder'].'">Outfit:'; $listaddon = array('128','129','130','131','132','133','134','135','136','137','138','139','140','141','142','143','144','145','146','147','148','149','150','151','152','153','154','155','158','159','251','252','268','269','270','273','278','279','288','289','302','324','325'); $lookadd = array('0','1','2','3'); foreach ($listaddon as $pid => $name) foreach ($lookadd as $addo => $name) { $addon1 = $SQL->query('SELECT * FROM players WHERE id = '.$id.' AND looktype = '.$listaddon[$pid].' AND lookaddons = '.$lookadd[$addo].';')->fetch(); if($addon1[looktype] == true ) { $finaddon = $addon1[looktype] + $addon1[lookaddons] * 300; $main_content .= '<TD with=50% style="background-color: '.$config['site']['darkborder'].'"><center><img src="images/addons/'.$finaddon.'.gif"/></center></TD></TD>'; } } } $main_content .= '</td>'; //end Outfit shower by Pening edited by loleslav if($config['site']['show_signature']) { // Signature by makr0mango. function randomSignature( $folder ) { $files = scandir ( "./$folder/" ); $signature = array(); foreach ( $files as $file ): if ( substr ( strtolower ( $file ) , -4 ) == ".png" ) $signature[] = $file; endforeach; return rand(0,count($signature)-1); } $random = randomSignature("signatures"); $main_content .= '<br><tr></tr><tr></tr><tr></tr><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['site']['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Signature</B></TD></TR>'; $main_content .= "<TR BGCOLOR=".$config['site']['darkborder']."><TD WIDTH=20%>Forum Link:</TD><TD><input type='text' size='75' onclick='this.select();' value='[url=\"http://" . $_SERVER['HTTP_HOST'] . "\"][IMG=http://" . $_SERVER['HTTP_HOST'] . "/signature.php?character=" .$player->getName(). "ℑ=" . $random . "][/url]' /></TD></TR>"; $main_content .= "<TR BGCOLOR=".$config['site']['lightborder']."><TD WIDTH=20%>Direct Link:</TD><TD><input type='text' size='75' onclick='this.select();' value='http://" . $_SERVER['HTTP_HOST'] . "/signature.php?character=" .$player->getName(). "ℑ=" . $random . "' /></TD></TR>"; $main_content .= "<TR BGCOLOR=".$config['site']['darkborder']."><TD COLSPAN='2' style='text-align: center;'><img src='signature.php?character=" .$player->getName(). "ℑ=" . $random . "' /></TD></TR>"; $main_content .= '</TD></TR></TABLE>'; // Signature by makr0mango. } //modified status scripts by ballack13 $main_content .= '<table width=100%><tr>'; //equipment shower by ballack13 $id = $player->getCustomField("id"); $number_of_items = 1; $main_content .= '<td align=center><table with=100% style="border: solid 1px #888888;" CELLSPACING="1"><TR>'; $list = array('2','1','3','6','4','5','9','7','10','8'); foreach ($list as $pid => $name) { $top = $SQL->query('SELECT * FROM player_items WHERE player_id = '.$id.' AND pid = '.$list[$pid].';')->fetch(); if($top[itemtype] == false) { if($list[$pid] == '8') { $main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Soul:<br/>'.$player->getSoul().'</td>'; } if(is_int($number_of_items / 3)){ $main_content .= '<TD style="background-color: '.$config['site']['darkborder'].'; text-align: center;"><img src="images/items/'.$list[$pid].'.gif"/></TD></tr><tr>'; } else { $main_content .= '<TD style="background-color: '.$config['site']['darkborder'].'; text-align: center;"><img src="images/items/'.$list[$pid].'.gif"/></TD>'; } $number_of_items++; } else { if($list[$pid] == '8') { $main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Soul:<br/>'.$player->getSoul().'</td>'; } if(is_int($number_of_items / 3)) $main_content .= '<TD style="background-color: '.$config['site']['darkborder'].'; text-align: center;"><img src="images/items/'.$top[itemtype].'.gif" width="45"/></TD></tr><tr>'; else $main_content .= '<TD style="background-color: '.$config['site']['darkborder'].'; text-align: center;"><img src="images/items/'.$top[itemtype].'.gif" width="45"/></TD>'; $number_of_items++; } if($list[$pid] == '8') { $main_content .= '<td style="background-color: '.$config['site']['darkborder'].'; text-align: center;">Cap:<br/>'.$player->getCap().'</td>'; } } $main_content .= '</tr></TABLE></td>'; //Hp/Mana/Exp Status by ballack13 $hp = ($player->getHealth() / $player->getHealthMax() * 100); $main_content .= '<td align=center ><table width=100%><tr><td align=center><table CELLSPACING="1" CELLPADDING="4"><tr><td BGCOLOR="#D4C0A1" align="left" width="20%"><b>Player Health:</b></td> <td BGCOLOR="#D4C0A1" align="left">'.$player->getHealth().'/'.$player->getHealthMax().'<div style="width: 100%; height: 3px; border: 1px solid #000;"><div style="background: red; width: '.$hp.'%; height: 3px;"></td></tr>'; if ($player->getManaMax() > 0) { $mana = ($player->getMana() / $player->getManaMax() * 100); $main_content .= '<tr><td BGCOLOR="#F1E0C6" align="left"><b>Player Mana:</b></td><td BGCOLOR="#F1E0C6" align="left">'.$player->getMana().'/'.$player->getManaMax().'<div style="width: 100%; height: 3px; border: 1px solid #000;"><div style="background: blue; width: '.$mana.'%; height: 3px;"></td>'; } else { $main_content .= '<tr><td BGCOLOR="#F1E0C6" align="left"><b>Player Mana:</b></td><td BGCOLOR="#F1E0C6" align="left">0/0<div style="width: 100%; height: 3px; border: 1px solid #000;"><div style="background: blue; width: 100%; height: 3px;"></td>'; } $main_content .= '</tr></table><tr>'; $next = ($player->getLevel() + 1); $id = $player->getCustomField("id"); $resets = $SQL->query('SELECT `reset` FROM `players` WHERE `id`= ' . $id . ';')->fetch(); $exp = ((50 / 3) * ($player->getLevel() * $player->getLevel() * $player->getLevel()) - (100 * ($player->getLevel() * $player->getLevel())) + ((850/3) * $player->getLevel()) - 200); $expnext = ((50 / 3) * ($next * $next * $next) - (100 * ($next * $next)) + ((850/3) * $next) - 200 - $player->getExperience()); $expresult = ($expnext / (($expnext + $player->getExperience()) - $exp) * 100); $main_content .= '<tr><table CELLSPACING="1" CELLPADDING="4"><tr><td BGCOLOR="'.$config['site']['lightborder'].'" align="left" width="20%"><b>Player Level:</b></td><td BGCOLOR="'.$config['site']['lightborder'].'" align="left">'.$player->getLevel().'</td></tr><tr><td BGCOLOR="'.$config['site']['lightborder'].'" align="left" width="20%"><b>Resets:</b></td><td BGCOLOR="'.$config['site']['lightborder'].'" align="left">' . $resets[reset] . '</td></tr> <tr><td BGCOLOR="'.$config['site']['darkborder'].'" align="left"><b>Player Experience:</b></td><td BGCOLOR="'.$config['site']['darkborder'].'" align="left">'.$player->getExperience().' EXP.</td></tr> <tr><td BGCOLOR="'.$config['site']['lightborder'].'" align="left"><b>To Next Level:</b></td><td BGCOLOR="'.$config['site']['lightborder'].'" align="left">You need <b>'.$exp.' EXP</b> to Level <b>'.$next.'</b>.<div title="99.320604545 %" style="width: 100%; height: 3px; border: 1px solid #000;"><div style="background: red; width: '.$expresult.'%; height: 3px;"></td></tr></table></td></tr></table></tr></TABLE></td>'; if($config['site']['show_skills_info']) { //Skills Pics v2. Table borders optimized by Absolute Mango $main_content .= '<br/><table cellspacing="0" cellpadding="0" border="0" width="200" align="center"><caption><strong>Skills</strong></caption><tbody><tr> <td align="center"><a href="?subtopic=highscores&list=experience"><img src="images/skills/level.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=magic"><img src="images/skills/ml.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=fist"><img src="images/skills/fist.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=club"><img src="images/skills/club.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=sword"><img src="images/skills/sword.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=axe"><img src="images/skills/axe.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=distance"><img src="images/skills/dist.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=shield"><img src="images/skills/def.png" style="border: none;"/></a></td> <td align="center"><a href="?subtopic=highscores&list=fishing"><img src="images/skills/fish.png" style="border: none;"/></a></td> </tr></tbody></table> <table cellspacing="0" cellpadding="0" border="1" width="360" align="center"><tbody><tr><tr bgcolor="'.$config['site']['darkborder'].'"> <td align="center" width="38"><strong>Level</strong></td> <td align="center" width="38"><strong>ML</strong></td> <td align="center" width="42"><strong>Fist</strong></td> <td align="center" width="40"><strong>Club</strong></td> <td align="center" width="38"><strong>Swrd</strong></td> <td align="center" width="38"><strong>Axe</strong></td> <td align="center" width="38"><strong>Dist</strong></td> <td align="center" width="38"><strong>Shield</strong></td> <td align="center" width="38"><strong>Fish</strong></td></font> </tr> <tr bgcolor="'.$config['site']['lightborder'].'"> <td align="center" width="38">'.$player->getLevel().'</td> <td align="center" width="38">'.$player->getMagLevel().'</td> <td align="center" width="38">'.$player->getSkill(0).'</td> <td align="center" width="38">'.$player->getSkill(1).'</td> <td align="center" width="38">'.$player->getSkill(2).'</td> <td align="center" width="38">'.$player->getSkill(3).'</td> <td align="center" width="38">'.$player->getSkill(4).'</td> <td align="center" width="38">'.$player->getSkill(5).'</td> <td align="center" width="38">'.$player->getSkill(6).'</td> </tr></tbody></table><div table align="center"> <br /> </div>'; //skill script end } //quest status by ballack13 $id = $player->getCustomField("id"); $number_of_quests = 0; $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['site']['vdarkborder'].'><TD align="left" COLSPAN=2 CLASS=white><B>Quests</B></TD></TD align="right"></TD></TR>'; $quests = $config['site']['quests']; foreach ($quests as $storage => $name) { if(is_int($number_of_quests / 2)) $bgcolor = $config['site']['darkborder']; else $bgcolor = $config['site']['lightborder']; $number_of_quests++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=95%>'.$storage.'</TD>'; $quest = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$quests[$storage].';')->fetch(); if($quest == false) { $main_content .= '<TD><img src="images/false.png"/></TD></TR>'; } else { $main_content .= '<TD><img src="images/true.png"/></TD></TR>'; } } $main_content .= '</TABLE></td></tr></table><br />'; $deads = 0; //deaths list $player_deaths = $SQL->query('SELECT `id`, `date`, `level` FROM `player_deaths` WHERE `player_id` = '.$player->getId().' ORDER BY `date` DESC LIMIT 0,10;'); foreach($player_deaths as $death) { if(is_int($number_of_rows / 2)) $bgcolor = $config['site']['darkborder']; else $bgcolor = $config['site']['lightborder']; $number_of_rows++; $deads++; $dead_add_content .= "<tr bgcolor=\"".$bgcolor."\"> <td width=\"20%\" align=\"center\">".date("j M Y, H:i", $death['date'])."</td> <td>"; $killers = $SQL->query("SELECT environment_killers.name AS monster_name, players.name AS player_name, players.deleted AS player_exists FROM killers LEFT JOIN environment_killers ON killers.id = environment_killers.kill_id LEFT JOIN player_killers ON killers.id = player_killers.kill_id LEFT JOIN players ON players.id = player_killers.player_id WHERE killers.death_id = ".$SQL->quote($death['id'])." ORDER BY killers.final_hit DESC, killers.id ASC")->fetchAll(); $i = 0; $count = count($killers); foreach($killers as $killer) { $i++; if(in_array($i, array(1, $count))) $killer['monster_name'] = str_replace(array("an ", "a "), array("", ""), $killer['monster_name']); if($killer['player_name'] != "") { if($i == 1) $dead_add_content .= "Killed at level <b>".$death['level']."</b> by "; else if($i == $count) $dead_add_content .= " and by "; else $dead_add_content .= ", "; if($killer['monster_name'] != "") $dead_add_content .= $killer['monster_name']." summoned by "; if($killer['player_exists'] == 0) $dead_add_content .= "<a href=\"index.php?subtopic=characters&name=".urlencode($killer['player_name'])."\">"; $dead_add_content .= $killer['player_name']; if($killer['player_exists'] == 0) $dead_add_content .= "</a>"; } else { if($i == 1) $dead_add_content .= "Died at level <b>".$death['level']."</b> by "; else if($i == $count) $dead_add_content .= " and by "; else $dead_add_content .= ", "; $dead_add_content .= $killer['monster_name']; } if($i == $count) $dead_add_content .= "."; } $dead_add_content .= ".</td></tr>"; } if($deads > 0) $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['site']['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Deaths</B></TD></TR>' . $dead_add_content . '</TABLE><br />'; //end if(!$player->getHideChar()) { $main_content .= '<TABLE BORDER=0><TR><TD></TD></TR></TABLE><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['site']['vdarkborder'].'><TD COLSPAN=2 CLASS=white><B>Account Information</B></TD></TR>'; if($account->getRLName()) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR='.$config['site']['lightborder'].'><TD WIDTH=20%>Real name:</TD><TD>'.$account->getRLName().'</TD></TR>'; } if($account->getLocation()) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR='.$config['site']['darkborder'].'><TD WIDTH=20%>Location:</TD><TD>'.$account->getLocation().'</TD></TR>'; } if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; if($account->getLastLogin()) $main_content .= '<TR BGCOLOR='.$config['site']['lightborder'].'><TD WIDTH=20%>Last login:</TD><TD>'.date("j F Y, g:i a", $account->getLastLogin()).'</TD></TR>'; else $main_content .= '<TR BGCOLOR='.$config['site']['lightborder'].'><TD WIDTH=20%>Last login:</TD><TD>Never logged in.</TD></TR>'; if($account->getCreated()) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR='.$config['site']['lightborder'].'><TD WIDTH=20%>Created:</TD><TD>'.date("j F Y, g:i a", $account->getCreated()).'</TD></TR>'; } if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD>Account Status:</TD><TD>'; $main_content .= ($account->isPremium()) ? '<b><font color="green">Premium Account</font></b>' : '<b><font color="green">Gratis Premium Account</font></b>'; if($account->isBanned()) if($account->getBanTime() > 0) $main_content .= '<font color="red"> [Banished until '.date("j F Y, G:i", $account->getBanTime()).']</font>'; else $main_content .= '<font color="red"> [Banished FOREVER]</font>'; $main_content .= '</TD></TR></TABLE>'; $main_content .= '<br><TABLE BORDER=0><TR><TD></TD></TR></TABLE><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR='.$config['site']['vdarkborder'].'><TD COLSPAN=5 CLASS=white><B>Characters</B></TD></TR> <TR BGCOLOR='.$config['site']['darkborder'].'><TD><B>Name</B></TD><TD><B>World</B></TD><TD><B>Level</B></TD><TD><b>Status</b></TD><TD><B> </B></TD></TR>'; $account_players = $account->getPlayersList(); $account_players->orderBy('name'); $player_number = 0; foreach($account_players as $player_list) { if(!$player_list->getHideChar()) { $player_number++; if(is_int($player_number / 2)) $bgcolor = $config['site']['darkborder']; else $bgcolor = $config['site']['lightborder']; if(!$player_list->isOnline()) $player_list_status = '<font color="red">Offline</font>'; else $player_list_status = '<font color="green">Online</font>'; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=52%><NOBR>'.$player_number.'. '.$player_list->getName(); $main_content .= ($player_list->isDeleted()) ? '<font color="red"> [DELETED]</font>' : ''; $main_content .= '</NOBR></TD><TD WIDTH=15%>'.$config['site']['worlds'][$player_list->getWorld()].'</TD><TD WIDTH=25%>'.$player_list->getLevel().' '.$vocation_name[$player_list->getWorld()][$player_list->getPromotion()][$player_list->getVocation()].'</TD><TD WIDTH="8%"><b>'.$player_list_status.'</b></TD><TD><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0><FORM ACTION="?subtopic=characters" METHOD=post><TR><TD><INPUT TYPE=hidden NAME=name VALUE="'.$player_list->getName().'"><INPUT TYPE=image NAME="View '.$player_list->getName().'" ALT="View '.$player_list->getName().'" SRC="'.$layout_name.'/images/buttons/sbutton_view.gif" BORDER=0 WIDTH=120 HEIGHT=18></TD></TR></FORM></TABLE></TD></TR>'; } } $main_content .= '</TABLE></TD><TD><IMG SRC="'.$layout_name.'/images/general/blank.gif" WIDTH=10 HEIGHT=1 BORDER=0></TD></TR></TABLE>'; } $main_content .= '<BR><BR><FORM ACTION="?subtopic=characters" METHOD=post><TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>Search Character</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'"><TABLE BORDER=0 CELLPADDING=1><TR><TD>Name:</TD><TD><INPUT NAME="name" VALUE=""SIZE=29 MAXLENGTH=29></TD><TD><INPUT TYPE=image NAME="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18></TD></TR></TABLE></TD></TR></TABLE></FORM>'; $main_content .= '</TABLE>'; } else $search_errors[] = 'Character <b>'.$name.'</b> does not exist.'; } else $search_errors[] = 'This name contains invalid letters. Please use only A-Z, a-z and space.'; if(!empty($search_errors)) { $main_content .= '<div class="SmallBox" > <div class="MessageContainer" > <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="ErrorMessage" > <div class="BoxFrameVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="BoxFrameVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></div> <div class="AttentionSign" style="background-image:url('.$layout_name.'/images/content/attentionsign.gif);" /></div><b>The Following Errors Have Occurred:</b><br/>'; foreach($search_errors as $search_error) $main_content .= '<li>'.$search_error; $main_content .= '</div> <div class="BoxFrameHorizontal" style="background-image:url('.$layout_name.'/images/content/box-frame-horizontal.gif);" /></div> <div class="BoxFrameEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> <div class="BoxFrameEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></div> </div></div><br/>'; $main_content .= '<BR><FORM ACTION="?subtopic=characters" METHOD=post><TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>Search Character</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'"><TABLE BORDER=0 CELLPADDING=1><TR><TD>Name:</TD><TD><INPUT NAME="name" VALUE=""SIZE=29 MAXLENGTH=29></TD><TD><INPUT TYPE=image NAME="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18></TD></TR></TABLE></TD></TR></TABLE></FORM>'; } } ?> Tenta isso. Não garanto nada Deve aparecer em baixo do level do player se funcionar1 ponto -
Esse código é basicamente a função do ferreiro, que escrevi baseando-me no que entendi da sua explicação. A atribuição da profissão é bem simples, bastando manipular a storage como o Wolf explicou. local prof_config = { key = 8171, --Storage do sistema de profissões. storage_value = 1, --Valor da storage do sistema de profissões correspondente a ferreiro. fail_chance = xxx, --Chance de falha (%). Caso não haja, basta colocar false. material = {9811, 9819, 9808}, --Materiais. results = {xxx, xxx, xxx, ...} --Possíveis resultados. (itemid) } function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid, prof_config.key) ~= prof_config.storage_value then return doPlayerSendCancel(cid, "You don't belong to this profession.") elseif not isInArray(prof_config.material, itemEx.itemid) then return doPlayerSendCancel(cid, "You can't use your hammer in this thing.") end doRemoveItem(itemEx.uid, 1) if prof_config.fail_chance and math.random(1, 100) > prof_config.fail_chance then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Fail. :/") doSendAnimatedText(toPosition, "Fail", 215) else local result = prof_config.results[math.random(#prof_config.results)] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You created a "..getItemNameById(result).."!") doPlayerAddItem(cid, result, 1) end return true end1 ponto
-
@@Daniel, obrigado novamente ^^ Hive (?) rs1 ponto
-
[Pedido] Sistema de Profissão 8.60
baratask reagiu a Night Wolf por uma questão
faz ferreiro alquimista e minerador serem valores em um determinado storage, todos os outros scripts de cada classe podem checar se o storage do cara é 1 (ferreiro), 2 (alquimista) ou 3 (minerador). Como o valor padrão de todo storage é -1 dá tranquilo. E aí na action de mineração/ferreiro vc coloca if not isInArray({1,3}, getPlayerStorageValue(cid, 14910)) then return true end e faz a mesma coisa na spell/talkaction mudando só o 1,3 e colocando 2 no lugar: if not isInArray({1,3}, getPlayerStorageValue(cid, 14910)) then return true end1 ponto -
Área de treiners. Imagens: Download= https://mega.nz/#!O50VWTjR!FXN9Z8qztv8ltXzPLnZ0EZ0KDYVgPxhovkbKm-PRIGw Scan= https://www.virustotal.com/pt/file/a1f8c4c8c2d126698fa3aff6a833c8ad93812ee3b2906844ddfb066a4e479d2d/analysis/1448999608/1 ponto
-
[Encerrado][Mapper]
Megamadiss reagiu a Deadpool por um tópico no fórum
Além de reviver. Não leu o resto do tópico.. Onde diz " não mapeio para derivados"1 ponto -
Zombie Event - Aura Firestorm - Aura.1 ponto
-
Mapa Pokemon
Administrador reagiu a FlamesAdmin por uma questão
coloque o items.xml e .otb dentro da pasta 854 do RME1 ponto -
Basalt wall
Administrador reagiu a FLC por uma questão
pelo que vejo acho que não existem, olhei na Warzone e nada...1 ponto -
[Resolvido] Remover Créditos estranhos no Console
Spring Trap reagiu a Yan Liima por uma questão
Ok estarei mudando para você. Sobre as sources não tem como eu pegar as sorces ou tentar achar essa rsrs mais tem varias na internet. Siga mais detalhes no Imbox. Estarei mudando para você aqui sem problema. Topico resolvido obrigado por escolher o Xtibia1 ponto -
Errado! ultimamente muito servidores estão sendo roubado pelo programa Xampp, os cara não consegue so invadir pela pasta webdav mais existe outros metodos. é claro que depende da versão do xampp. o Dbzo Evolution ums dos DBO que bombou foi invadido e o sujeito que invadiu a Vps pelo xampp jogou o servidor do cara (Renan) na internet. hoje muitas pessoas usa o servidor do Renan como base, a maioria ja baixa o server e coloca online. Sei disso porque uma vez o mesmo individo que invadiu a vps do Renan invadiu a minha também, ele conseguiu acessar meu banco de dados pelo xampp que estava com senha até no cú. ele colocou adm no teu char e começo zuar o server, a sorte era que eu estava fechando o servidor Kkkk. Bom quando acontecer isso contigo eu peço para vocês tentar saber quem é o cara que ta de palhaçada e denunciar ele pois o "carinha" que anda nukando geral é um tal de Kojack e ums amiguinhos dele.1 ponto
-
1 - Se você utiliza XAMPP, siga os passos abaixo para tornar-lo mais seguro: Crie um senha relativamente boa e segura para o seu xampp/phpMyAdmin. Exclua completamente a pasta webdav. Caso use Windows instale o Kiwi Guard Firewall. Se você usa Linux instale IP Table. Vá até o seu phpMyAdmin > Privilégios e exclua o usuário pma. Vá até a pasta phpMyadmin/config.inc.php e procure pela seguinte tag: $cfg['blowfish_secret'] = 'xampp'; E mude a palava xampp por algo completamente sem sentido, exemplo: $cfg['blowfish_secret'] = 'hsdewu1721has1au'; Ainda em config.inc.php e procure pela seguinte tag: $cfg['Servers'][$i]['auth_type'] = 'config'; E mude-a para: $cfg['Servers'][$i]['auth_type'] = 'cookie'; Agora vá até php/php.ini e procure pela seguinte tag: Safe_mode = Off Ative-o, deixando assim: Safe_mode = On Prontinho, seu XAMPP está bem mais seguro!1 ponto
-
[Talkaction Mod] Tp Event Mod (com limite de players)
hellstyller reagiu a Krono por um tópico no fórum
Este mode é util em eventos, pois permite criar tps atravez de cordenadas, e também permite limitar o numero de players que poderão entrar no teleporte. Para instalar crie um arquivo dentro da pasta mods do seu servidor como o nome tpevent.xml e cole este script dentro. <?xml version="1.0" encoding="utf-8"?> <mod name="Portal" version="2.0" enabled="yes"> <description> Faz um portal no seu pe , e as pessoas podem entrar ex. /portal x,y,z,quantas pessoas ex. /portal 1000,1000,7,15 </description> <talkaction words="/portal" access="5" event="script"><![CDATA[ function onSay(cid, words, param) param = param.explode(param, ',') if param then teleport = doCreateTeleport(1387, {x=param[1], y=param[2], z=param[3]}, getPlayerPosition(cid)) doItemSetAttribute(teleport, "description", 'The portal may enter '..param[4]..' people left.') doItemSetAttribute(teleport, "aid", 100+param[4]) else doPlayerSendCancel(cid, "You must set param.") end return TRUE end ]]></talkaction> <movement type="StepIn" itemid="9740" event="script"><![CDATA[ function onStepIn(cid, item, position, fromPosition) if item.actionid > 100 then doItemSetAttribute(item.uid, "description", 'The portal may enter '..(item.actionid-101)..' people left.') doItemSetAttribute(item.uid, "aid", item.actionid-1) elseif item.actionid == 100 then doBroadcastMessage("The Portal has ran out of energy and collapsed.", MESSAGE_EVENT_ADVANCE) doSendMagicEffect(position, 2) doRemoveItem(item.uid, 1) end return true end ]]></movement> </mod> Utilizando o comando Modo de usar: / portal X, Y, Z, quantas pessoas podem entrar no portal Exemplo /portal 1050, 2000, 7, 15 espero com ajudar a muitas pessoas com esse Mod. creditos: não encontrado1 ponto -
Olá galera. Devido a um pedido, refiz a função getSearchString das sources do TFS em Lua, e vou aproveitar e postar ela aqui, caso alguém vá a precisar um dia. Explicando os parâmetros da função getSearchString(fromPos, toPos, isFromCreature, isToCreature): fromPos = posição inicial toPos = posição do objeto procurado isFromCreature = a posição inicial é uma posição de uma criatura? (true / false) [default = false] isToCreature = a posição do objeto é uma posição de uma criatura? (true / false) [default = false] E pra facilitar o uso, já aproveitei e fiz a função para usar o comando exiva: useExiva(cid, pid). cid = o uid do player que usa pid = o uid do player procurado Ambas as funções estão no code. Bom uso.1 ponto
-
1 ponto
-
Critical system
Administrador reagiu a SkyLigh por uma questão
Movido para resolvidos. Tópico Movido Este tópico foi movido de "OTServ → Suporte OTServ → Suporte Scripting" para "OTServ → Suporte OTServ → Suporte Scripting → Pedidos e dúvidas resolvidos - Scripting".-1 pontos -
Seria possivel abrir trade atacando o npc? [ideia no post]
Administrador reagiu a 4sharedddd por uma questão
Beleza, valeu cara.-1 pontos
