Jump to content
themagicfreak

Sistema de mineria

Recommended Posts

Hola bueno he sacodo este sistema de elitepvpers y para los que alli no se enteran mucho las traigo aqui,alla vamos.

 

Está viendo el "sistema de la minería", que ha sido publicado recientemente.

¿Qué se puede hacer?

-> puedes comprar minas

-> Se puede ajustar la APN de trabajo para obtener más yang de las minas

-> Puede permitir a los jugadores trabajar, lo que da a ambas partes Yang

-> puedes cambiar un balance en el que se puede ver la cantidad de las minas

-> puedes tratar de atacar a otras minas

-> Se necesitan pases de plata y Yang para la apertura de una mina de plata

-> La búsqueda es fácilmente personalizable.

 

La quest:

quest mine begin
state start begin
  function get_minecount(playername)
   if playername == nil then
	local playername = pc.get_name()
   end
   local  curmines = mysql_query("SELECT mines FROM player.player WHERE player.`name`='"..playername."'")
   return tonumber(curmines[1][1])
  end
  function get_working()
   local result = mysql_query("SELECT working FROM player.player WHERE player.name='"..pc.get_name().."'")
   return tonumber(result[1][1])
  end
  function buy_mine()
   local curmine = mine.get_minecount()
   mysql_query("UPDATE player.player SET mines=mines+1 WHERE player.`name`='"..pc.get_name().."'")
   mysql_query("INSERT INTO player.mine_proto (owner) VALUES('"..pc.get_id(pc.get_name()).."')")
   mysql_query("INSERT INTO player.mine_index (id) SELECT id FROM sh_player.mine_proto WHERE mine_proto.`owner`='"..pc.get_id(pc.get_name()).."'")
   chat("Du hast eine Silbermine gekauft!")
   chat("Du hast nun "..curmine.." Minen")
  end
  function calc_price()
   local pricelist = { }
   local curmine = mine.get_minecount()
   local calcprice = curmine*100000000+100000000
   table.insert(pricelist, calcprice)
   table.insert(pricelist, 1)
   return pricelist
  end
  function get_title(mine_id)
   assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
   local title = mysql_query("SELECT bezeichnung FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
   return tostring(title[1][1])
  end
  function get_money(mine_id)
   assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
   local money = mysql_query("SELECT money FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
   return tonumber(money[1][1])
  end
  function get_workers(mine_id)
   assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
   local workers = mysql_query("SELECT workers FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
   return tonumber(workers[1][1])
  end
  function get_user_workers(mine_id)
   assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
   local result = {}
   local title = mysql_query("SELECT user1,user2,user3,user4,user5 FROM player.mine_index WHERE mine_index.id='"..mine_id.."'")
   for x = 1, 5, 1 do
	table.insert(result, tonumber(title[1][x]))
   end
   return result
  end
  function get_income(mine_id)
   assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
   local workers = mine.get_workers(mine_id)
   local workers2 = mine.get_user_workers(mine_id)
   local counter = 0
   for x = 1, 5, 1 do
	if workers2[x] != 0 then
	 local counter=counter+1
	end
   end
   local income1 = workers*10000
   local income2 = counter*50000
   return tonumber(income1+income2)
  end
  function update(mine_id)
   assert(type(mine_id)=="number", "mine_id ist keine Zahl!")
   local last_update = mysql_query("SELECT last_update FROM player.mine_proto WHERE mine_proto.id='"..mine_id.."'")
   local calcdif = get_time()-tonumber(last_update[1][1])
   local abstand = math.floor(calcdif/3600)
   if abstand == 0 then return end
   local mine_income = mine.get_income(mine_id)
   local give_money = mine_income*abstand
   mysql_query("UPDATE player.mine_proto SET last_update='"..get_time().."' WHERE mine_proto.id='"..mine_id.."'")
   mysql_query("UPDATE player.mine_proto SET money=money+'"..tonumber(give_money).."' WHERE mine_proto.id='"..mine_id.."'")
  end
  function get_mines(playername)
   if playername == nil then
	local playername = pc.get_name()
   end
   local mymines = mine.get_minecount()
   local get_mines = mysql_query("SELECT id FROM player.mine_proto WHERE owner='"..pc.get_id(playername).."'")
   local result = {}
   for x = 1, mymines, 1 do
	table.insert(result, tonumber(get_mines[1][x]))
   end
   return result
  end
  when 20092.chat."Die Silberminen" begin
   local silberpass = 100079
   local yangkosten = 100000000
   say_title("Die Silberminen")
   say("Hallo "..pc.get_name().."!")
   say("Die Silberminen sind offen!")
   say("Wenn du einen Pass dafür hast und")
   say("die Aufwendungen bezahlen kannst,")
   say("kannst du gerne eine Silbermine eröffnen!")
   say_reward("Du brauchst einen Silberpass.")
   say_reward("Du brauchst "..yangkosten.." Yang!")
   local a = select("Silbermine eröffnen!", "Was ist das?", "Abbrechen")
   if a== 3 then return end
   if a == 2 then
	say_title("Die Silberminen")
	say("Wenn du eine Silbermine aufmachst,")
	say("erhälst du immer wieder Yang. Das Yang")
	say("werden deine Arbeiter in der Mine lagern.")
	say("Du kannst es jederzeit abholen.")
	say("Je mehr Arbeiter darin arbeiten, desto")
	say("mehr Yang erhälst du.")
	return
   end
   if pc.count_item(silberpass) == 0 then
	say_title("Die Silberminen")
	say("Du hast leider keinen Pass!")
	say("Bitte finde einen Silberpass!")
	say_item_vnum(silberpass)
	return
   end
   if pc.get_gold() < yangkosten then
	say_title("Die Silberminen")
	say("Du hast leider nicht genug Yang.")
	say("Komm wieder, wenn du genug hast.")
	return
   end
   pc.change_gold(-yangkosten)
   pc.remove_item(silberpass)
   mine.buy_mine()
   say_title("Die Silberminen -> Mine anlegen")
   say("Du hast die Silbermine gekauft.")
   say("Ab sofort kannst du sie verwalten!")
   wait()
   setstate(mines)
  end
end
state mines begin
  when login or enter begin
   send_letter("Silberminen")
  end
  when button or info begin
   local silberpass = 100079
   say_title("Silberminen")
   say("Was möchtest du tun?")
   if pc.getqf("mines") == 5 then
	local a = select("Silberminen", "Minen überfallen","Bilanz", "Abbrechen")
   else
	local a = select("Silberminen", "Minen überfallen","Bilanz", "Abbrechen", "Mine kaufen")
   end
   if a == 4 then
	return
   end
   if a == 5 then
	local pricer = mine.calc_price()
	say_title("Silbermine kaufen")
	say("Du möchtest eine Silbermine aufmachen?")
	say("Das kostet dich "..pricer[1].." Yang.")
	say("Zudem brauchst du noch:")
	say(pricer[2].." Silberpässe.")
	local a2 = select("Kaufen", "Abbrechen")
	if a2 == 2 then return end
	if pc.get_gold() < tonumber(pricer[1]) then say("Du hast nicht genug Yang!") return end
	if pc.count_item(silberpass) < tonumber(pricer[2]) then say("Du hast nicht genügend Silberpässe!") return end
	pc.change_gold(-tonumber(pricer[1]))
	pc.remove_item(silberpass, tonumber(pricer[2]))
	mine.buy_mine()
	setskin(NOWINDOW)
	return
   end
   if a == 3 then
	local getmines = mine.get_mines()
	local moneymines = {}
	local incomemines = {}
	for x = 1, table.getn(getmines), 1 do
	 mine.update(getmines[x])
	 table.insert(moneymines, mine.get_money(tonumber(getmines[x])))
	 table.insert(incomemines, mine.get_income(tonumber(getmines[x])))
	end
	local endincome =  0
	local endmoney = 0
	for x = 1, table.getn(moneymines), 1 do
	 local endincome = endincome+incomemines[x]
	 local endmoney = endmoney+moneymines[x]
	end
	say_title("Silberminen -> Bilanz")
	for x = 1, table.getn(getmines), 1 do
	 say("Einkommen "..mine.get_title(getmines[x])..": "..incomemines[x])
	 say("Yang "..mine.get_title(getmines[x])..": "..moneymines[x])
	 say("---")
	end
	say("---")
	say("Kumuliertes Einkommen: "..endincome)
	say("Kumuliertes Yang: "..endmoney)
	return
   end
  
   if a == 1 then
	local getmines = mine.get_mines()
	local moneymines = {}
	local incomemines = {}
	for x = 1, table.getn(getmines), 1 do
	 mine.update(getmines[x])
	 table.insert(moneymines, mine.get_money(tonumber(getmines[x])))
	 table.insert(incomemines, mine.get_income(tonumber(getmines[x])))
	end
	for x = 1, table.getn(getmines), 1 do
	 say_title(mine.get_title(getmines[x]))
	 say("Einkommen: "..incomemines[x])
	 say("Yang: "..moneymines[x])
	 say("Arbeiter: "..mine.get_workers(getmines[x]))
	 say("Beschäftigte Arbeiter:")
	 local userworkers = mine.get_user_workers(getmines[x])
	 local counter = 0
	 for y = 1, table.getn(userworkers), 1 do
	  if userworkers[y] != 0 then
	   local counter = counter+1
	  end
	 end
	 for y = 1, counter, 1 do
	  say("  - "..pc.get_name_by_id(userworkers[y]))
	 end
	 local b = select("Auszahlen", "Arbeiter feuern", "NPC-Arbeiter verändern", "Fertig")
	 if b == 1 then
	  say_title("Auszahlen")
	  say("Wie viel möchtest du auszahlen?")
	  local c = input("")
	  if c == "" or c == 0 then return end
	  local c = tonumber(c)
	  if c < 0 then return end
	  if moneymines[x] < c then
	   say_title("Auszahlen")
	   say("Du hast nicht so viel Yang in der Mine!")
	   return
	  end
	  mysql_query("UPDATE player.mine_proto SET money=money-"..c.." WHERE id='"..getmines[x].."'")
	  pc.give_gold(c)
	  chat("Du hast "..c.. " Yang entnommen!")
	  return
	 end
	 if b == 2 then
	  say_title("Arbeiter feuern")
	  say("Welchen Arbeiter möchtest du entlassen?")
	  local cleanlist = {}
	  for x2 = 1, table.getn(userworkers), 1 do
	   if userworkers[x2] != 0 then
		table.insert(cleanlist, userworkers[x2])
	   else
		table.insert(cleanlist, "---")
	   end
	  end
	  local c2 = select(cleanlist[1], cleanlist[2], cleanlist[3], cleanlist[4], cleanlist[5])
	  if c2 <= 5 and c2 >= 1 then
	   if userworkers[c2] == 0 then
		return
	   end
	   say_title("Arbeiter entlassen")
	   say("Bist du sicher, dass du den Arbeiter entlassen willst?")
	   local c3 = select("Entlassen", "Abbrechen")
	   if c3 == 2 then return end
	   mysql_query("UPDATE player.mine_index SET user"..c2.."='0' WHERE id='"..getmines[x].."'")
	   chat("Du hast den Arbeiter entlassen!")
	  end
	  return
	 end
	 if b == 3 then
	  say_title("NPC-Arbeiter verändern")
	  say("Gib bitte die Veränderung an.")
	  say("Jeder Arbeiter kostet dich 1000000 Yang.")
	  say("Du erhälst das Yang beim Entlassen zu 50% zurück.")
	  say("Negative Zahlen lässt Arbeiter verschwinden, bis keine")
	  say("mehr übrig sind.")
	  local c = input("")
	  if c == "" or c == 0 then return end
	  local c = tonumber(c)
	  if c < 0 then
	   local workers = mine.get_workers(getmines[x])
	   if workers-math.abs(c) < 0 then
		mysql_query("UPDATE player.player SET workers=0 WHERE id='"..getmines[x].."'")
		pc.give_gold(workers*500000)
	   else
		mysql_query("UPDATE player.player SET workers=workers-"..math.abs(c).." WHERE id='"..getmines[x].."'")
		pc.give_gold(math.abs(c)*500000)
	   end
	  else
	   if pc.get_gold() < math.abs(c)*1000000 then
		say("Du hast leider nicht genug Yang!")
		return
	   end
	   pc.change_gold(-math.abs(c)*1000000)
	   mysql_query("UPDATE player.player SET workers=workers+"..math.abs(c).." WHERE id='"..getmines[x].."'")
	   say("Du hast erfolgreich die NPC-Arbeiter eingestellt!")
	  end
	 end
	end
	return
   end
   if a == 2 then
	say_title("Mine überfallen")
	say("Von welchem Spieler möchtest du eine Mine überfallen?")
	local b = input("")
	if b == "" then return end
	if pc.exists(b) == false then
	 say("Den Spieler gibt es nicht!")
	 return
	end
	local minecount = mine.get_minecount(b)
	if minecount == 0 then
	 say("Dieser Spieler hat keine Minen!")
	 return
	end
	say("Wie viel Yang möchtest du für den überfall einsetzen?")
	local d = input("")
	if d == "" or d <= 0 then return end
	if pc.get_money() < d then
	 say("Du hast nicht genug Yang!")
	 return
	end
	local factor = d / number(10, 100)
	if d > 1000000 then
	 local chance = 10
	elseif d > 750000 then
	 local chance = 9
	elseif d > 500000 then
	 local chance = 8
	elseif d > 250000 then
	 local chance = 7
	elseif d > 100000 then
	 local chance = 6
	elseif d > 75000 then
	 local chance = 5
	elseif d > 50000 then
	 local chance = 4
	elseif d > 25000 then
	 local chance = 3
	elseif d > 10000 then
	 local chance = 2
	else
	 local chance = 1
	end
	local finishchance = number(chance, 15)
	if finishchance == 15 then
	 local c = number(1, minecount)
	 local playermines = mine.get_mines(b)
	 local get_themoney = mine.get_money(playermines[c])
	 local moneycalc = get_the_money/4
	 mysql_query("UPDATE player.mine_proto SET money=money-"..moneycalc.." WHERE id='"..playermines[c].."'")
	 pc.give_gold(moneycalc)
	 say_title("überfall -> Erfolg!")
	 say("Du hast die Mine erfolgreich überfallen.")
	 say("Deine Beute: "..moneycalc)
	else
	 say_title("überfall -> Fehlschlag")
	 say("Du hast es leider nicht geschafft.")
	end
   end
  end
  when 20092.chat."In den Minen arbeiten" with mine.get_working() < 5 begin
   say_title("In den Minen arbeiten")
   say("Du kannst in einer Mine arbeiten, wenn du willst.")
   say("Du erhälst dafür 500.000 Yang jeden Tag!")
   say("Du musst aber daran denken, hier vorbei zu kommen.")
   say("Möchtest du dich in eine Mine eintragen?")
   local a = select("Eintragen", "Abbrechen")
   if a == 2 then return end
   say_title("In einer Mine arbeiten")
   say("Bitte gib' den Spielernamen an, bei")
   say("dem du arbeiten willst.")
   local b = input("")
   if b == "" then return end
   if pc.exists(b) == false then
	say("Der Spieler existiert nicht!")
	return
   end
   local minecount = mine.get_minecount(b)
   if minecount == 0 then
	say("Dieser Spieler hat keine Minen!")
	return
   end
   local playermines = mine.get_mines(b)
   for x = 1, minecount, 1 do
	local userworkers = mine.get_user_workers(playermines[x])
	for y = 1, table.getn(userworkers), 1 do
	 if userworkers[y] == 0 then
	  say_title("Platz gefunden!")
	  say("Ein Platz in "..mine.get_title(playermines[x]).." ist frei!")
	  say("Möchtest du dort arbeiten?")
	  local c = select("Auswählen", "Abbrechen")
	  if c == 1 then
	   mysql_query("UPDATE player.mine_index SET user"..y.." = '"..pc.get_id().."'")
	   mysql_query("UPDATE player.player SET working=working+1 WHERE `name`='"..pc.get_name().."'")
	   chat("Du arbeitest nun in der Mine!")
	   return
	  end
	 end
	end
   end
   say("Leider konnten keine weiteren Stellen gefunden werden.")
  end
  when 20092.chat."Minenarbeit belohnen!" with mine.get_working() >= 1 begin
   setskin(NOWINDOW)
   local thisdate = tonumber(os.date("%d"))
   if pc.getqf("lastdate") != thisdate then
	local belohnung = mine.get_working()*500000
	pc.give_gold(belohnung)
	pc.setqf("lastdate", thisdate)
	chat("Du hast deine Belohnung abgeholt!")
   else
	chat("Leider gibt es heute keine Belohnung mehr.")
	chat("Komm' morgen wieder.")
   end
  end
end
end

Y las funciones que se necesitan en questlib:

function pc.exists(playername)
assert(type(playername)=="string", "Spielername ist kein String!")
local ergebnis = mysql_query("SELECT exists FROM player.player WHERE player.`name`='"..playername.."'")
local result = tonumber(ergebnis[1][1])
if result == 1 then
  return true
end
return false
end
function pc.get_id(playername)
if playername == nil then
  local playername = pc.get_name()
end
local result = mysql_query("SELECT id FROM player.player WHERE player.`name`='"..playername.."'")
assert(type(result[1][1])!="nil", "Keine ID zum Namen!")
return tonumber(result[1][1])
end
function pc.get_name_by_id(playerid)
assert(type(playerid)=="number", "Playerid ist keine Nummer!")
local result = mysql_query("SELECT `name` FROM player.player WHERE player.id='"..playerid.."'")
assert(type(result[1][1])!="nil", "Kein Name zur ID!")
return tostring(result[1][1])
end
Además, es necesario ampliar la tabla de la DB del jugador:

ALTER TABLE player ADD `exists` enum('1','0') NOT NULL DEFAULT '1';
ALTER TABLE player ADD `mines` int(1) NOT NULL DEFAULT '0';
ALTER TABLE player ADD `working` int(1) NOT NULL DEFAULT '0';
Acontinuancion deberas crear otras 2 tablas:

CREATE TABLE `mine_index` (
  `id` int(10) unsigned NOT NULL DEFAULT '0',
  `user1` int(12) unsigned NOT NULL DEFAULT '0',
  `user2` int(12) unsigned NOT NULL DEFAULT '0',
  `user3` int(12) unsigned NOT NULL DEFAULT '0',
  `user4` int(12) unsigned NOT NULL DEFAULT '0',
  `user5` int(12) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `mine_proto` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `owner` int(12) unsigned NOT NULL DEFAULT '0',
  `money` bigint(64) unsigned NOT NULL DEFAULT '0',
  `controller` int(12) unsigned NOT NULL DEFAULT '0',
  `workers` int(12) unsigned NOT NULL DEFAULT '0',
  `bezeichnung` varchar(18) NOT NULL DEFAULT 'Mine',
  `last_update` bigint(64) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;

Creditos:

.Alessa

 

Fuente:

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

 

Las traducciones de las quest es a gusto de cada uno yo solo traigo para la gente que no visita Epvp

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...