[Add] Improved xml #define magic stuff.
This commit is contained in:
parent
3a8a9028d3
commit
c609780acc
@ -33,15 +33,15 @@ function create()
|
||||
-- Target destination.
|
||||
local i = 0
|
||||
repeat
|
||||
planet = space.getPlanet( misn.factions() )
|
||||
planet = space.getPlanet(misn.factions())
|
||||
i = i + 1
|
||||
until planet ~= space.landName() or i > 10
|
||||
-- Infinite loop protection.
|
||||
if i > 10 then
|
||||
misn.finish(false)
|
||||
end
|
||||
system = space.getSystem( planet )
|
||||
misn_dist = space.jumpDist( system )
|
||||
system = space.getSystem(planet)
|
||||
misn_dist = space.jumpDist(system)
|
||||
|
||||
-- Mission generics.
|
||||
i = rnd.int(6)
|
||||
@ -66,7 +66,7 @@ function create()
|
||||
misn_setTitle(string.format(title[i+21], carg_type, planet))
|
||||
end
|
||||
|
||||
-- More mission specifics
|
||||
-- More mission specifics.
|
||||
if misn_type == "Cargo" or misn_type == "Rush" then
|
||||
carg_mass = rnd.int(10, 30)
|
||||
i = rnd.int(12) -- Set the goods.
|
||||
@ -84,16 +84,16 @@ function create()
|
||||
end
|
||||
|
||||
if misn_type == "Cargo" then
|
||||
misn.setDesc( string.format( misn_desc[1], planet, system, carg_mass, carg_type ) )
|
||||
misn.setDesc(string.format( misn_desc[1], planet, system, carg_mass, carg_type))
|
||||
reward = misn_dist * carg_mass * (250+rnd.int(150)) +
|
||||
carg_mass * (150+rnd.int(75)) +
|
||||
rnd.int(1500)
|
||||
elseif misn_type == "Rush" then
|
||||
misn_time = time.get() + time.units(2) +
|
||||
rnd.int(time.units(2), time.units(4)) * misn_dist
|
||||
misn.setDesc( string.format( misn_desc[11], planet, system,
|
||||
misn.setDesc(string.format( misn_desc[11], planet, system,
|
||||
carg_mass, carg_type,
|
||||
time.str(misn_time), time.str(misn_time-time.get()) ) )
|
||||
time.str(misn_time), time.str(misn_time-time.get())))
|
||||
reward = misn_dist * carg_mass * (450+rnd.int(250)) +
|
||||
carg_mass * (250+rnd.int(125)) +
|
||||
rnd.int(2500)
|
||||
@ -101,49 +101,49 @@ function create()
|
||||
misn.setDesc(string.format(misn_desc[21], carg_type, planet, system))
|
||||
reward = misn_dist * (1000 + rnd.int(500)) + rnd.int(2000)
|
||||
end
|
||||
misn.setReward( string.format( misn_reward, reward ) )
|
||||
misn.setReward(string.format(misn_reward, reward))
|
||||
end
|
||||
|
||||
-- Mission is accepted
|
||||
-- Mission is accepted.
|
||||
function accept()
|
||||
if player.freeCargo() < carg_mass then
|
||||
tk.msg( full_title, string.format( full_msg, carg_mass-player.freeCargo() ))
|
||||
tk.msg(full_title, string.format(full_msg, carg_mass-player.freeCargo()))
|
||||
|
||||
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting
|
||||
carg_id = player.addCargo( carg_type, carg_mass )
|
||||
tk.msg( accept_title, string.format( accept_msg, carg_mass, carg_type ))
|
||||
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting.
|
||||
carg_id = player.addCargo(carg_type, carg_mass)
|
||||
tk.msg(accept_title, string.format( accept_msg, carg_mass, carg_type))
|
||||
|
||||
-- Set the hooks
|
||||
hook.land( "land" ) -- Only hook after accepting
|
||||
if misn_type == "Rush" then -- Rush needs additional time hook
|
||||
hook.time( "timeup" )
|
||||
-- Set the hooks.
|
||||
hook.land("land") -- Only hook after accepting.
|
||||
if misn_type == "Rush" then -- Rush needs additional time hook.
|
||||
hook.time("timeup")
|
||||
end
|
||||
else
|
||||
tk.msg( toomany_title, toomany_msg )
|
||||
tk.msg(toomany_title, toomany_msg)
|
||||
end
|
||||
end
|
||||
|
||||
-- Land hook
|
||||
-- Land hook.
|
||||
function land()
|
||||
if space.landName() == planet then
|
||||
if player.rmCargo( carg_id ) then
|
||||
if player.rmCargo(carg_id) then
|
||||
player.pay( reward )
|
||||
tk.msg( finish_title, string.format( finish_msg, carg_type ))
|
||||
tk.msg(finish_title, string.format( finish_msg, carg_type))
|
||||
misn.finish(true)
|
||||
else
|
||||
tk.msg( miss_title, string.format( miss_msg, carg_mass, carg_type ))
|
||||
tk.msg(miss_title, string.format( miss_msg, carg_mass, carg_type))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Time hook
|
||||
-- Time hook.
|
||||
function timeup()
|
||||
if time.get() > misn_time then
|
||||
player.msg( misn_time_msg )
|
||||
player.msg(misn_time_msg)
|
||||
misn.finish(false)
|
||||
end
|
||||
misn.setDesc( string.format( misn_desc[2], planet, system,
|
||||
misn.setDesc(string.format( misn_desc[2], planet, system,
|
||||
carg_mass, carg_type,
|
||||
time.str(misn_time), time.str(misn_time-time.get()) ) )
|
||||
time.str(misn_time), time.str(misn_time-time.get())))
|
||||
end
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
lang = lephisto.lang()
|
||||
if lang == "es" then
|
||||
-- Not translated atm
|
||||
else -- Default english
|
||||
-- Not translated atm.
|
||||
else -- Default english.
|
||||
misn_title = "Empire Recruitment"
|
||||
misn_reward = "%d credits"
|
||||
misn_desc = "Deliver some parcels for the Empire to %s."
|
||||
@ -20,23 +20,23 @@ You aren't too sure of what to make of your encounter with the Empire, only time
|
||||
end
|
||||
|
||||
function create()
|
||||
-- Intro text
|
||||
tk.msg( title[1], text[1] )
|
||||
if tk.yesno( title[1], text[2] )
|
||||
-- Intro text.
|
||||
tk.msg(title[1], text[1])
|
||||
if tk.yesno(title[1], text[2])
|
||||
then
|
||||
misn.accept()
|
||||
|
||||
dest = space.getPlanet("Empire");
|
||||
-- Mission details
|
||||
-- Mission details.
|
||||
reward = 3000
|
||||
misn.setTitle(misn_title)
|
||||
misn.setReward( string.format(misn_reward, reward) )
|
||||
misn.setDesc( string.format(misn_desc,dest))
|
||||
misn.setReward(string.format(misn_reward, reward))
|
||||
misn.setDesc(string.format(misn_desc,dest))
|
||||
|
||||
-- Flavour text and mini-briefing
|
||||
tk.msg( title[2], string.format( text[3], dest ))
|
||||
-- Flavour text and mini-briefing.
|
||||
tk.msg(title[2], string.format( text[3], dest))
|
||||
|
||||
-- Set up the goal
|
||||
-- Set up the goal.
|
||||
parcels = player.addCargo("Parcels", 0)
|
||||
hook.land("land")
|
||||
end
|
||||
@ -46,8 +46,8 @@ function land()
|
||||
if space.landName() == dest then
|
||||
if player.rmCargo(parcels) then
|
||||
player.pay(reward)
|
||||
-- More flavour text
|
||||
tk.msg(title[3], string.format( text[4], dest ))
|
||||
-- More flavour text.
|
||||
tk.msg(title[3], string.format(text[4], dest))
|
||||
var.push("es_cargo", true)
|
||||
misn.finish(true)
|
||||
end
|
||||
|
@ -1,7 +1,7 @@
|
||||
lang = lephisto.lang()
|
||||
if lang == "es" then
|
||||
-- Not translated atm
|
||||
else -- Default english
|
||||
-- Not translated atm.
|
||||
else -- Default english.
|
||||
misn_title = "Collective Scout"
|
||||
misn_reward = ""
|
||||
misn_desc = {}
|
||||
@ -23,8 +23,8 @@ else -- Default english
|
||||
end
|
||||
|
||||
function create()
|
||||
-- Intro text
|
||||
if tk.yesno( title[1], string.format(text[1], player.name()) )
|
||||
-- Intro text.
|
||||
if tk.yesno(title[1], string.format(text[1], player.name()))
|
||||
then
|
||||
misn.accept()
|
||||
|
||||
@ -34,13 +34,13 @@ function create()
|
||||
misn_base = "Omega Station"
|
||||
misn_base_sys = "NCG-7291"
|
||||
|
||||
-- Mission details
|
||||
-- Mission details.
|
||||
misn.setTitle(misn_title)
|
||||
misn.setReward( misn_reward )
|
||||
misn.setDesc( string.format(misn_desc[1],misn_nearby))
|
||||
misn.setReward(misn_reward)
|
||||
misn.setDesc(string.format(misn_desc[1],misn_nearby))
|
||||
|
||||
-- Flavour text and mini-briefing
|
||||
tk.msg( title[2], string.format( text[2], misn_nearby, misn_base, misn_base_sys ))
|
||||
-- Flavour text and mini-briefing.
|
||||
tk.msg(title[2], string.format(text[2], misn_nearby, misn_base, misn_base_sys))
|
||||
|
||||
hook.enter("enter")
|
||||
hook.land("land")
|
||||
@ -50,20 +50,20 @@ end
|
||||
function enter()
|
||||
sys = space.system()
|
||||
|
||||
-- Additional fleets
|
||||
if sys == "NCG-7291" then -- Increase action for realism
|
||||
-- Additional fleets.
|
||||
if sys == "NCG-7291" then -- Increase action for realism.
|
||||
pilot.add("Empire Sml Defense")
|
||||
pilot.add("Collective Sml Swarm")
|
||||
elseif sys == misn_target then
|
||||
p = pilot.add("Collective Drone")
|
||||
for k,v in pairs(p) do
|
||||
hook.pilotDeath( v, "kill")
|
||||
hook.pilotDeath(v, "kill")
|
||||
end
|
||||
end
|
||||
|
||||
-- update mission
|
||||
-- update mission.
|
||||
if misn_stage == 0 and sys == misn_target then
|
||||
misn.setDesc( string.format(misn_desc[2],misn_base,misn_base_sys) )
|
||||
misn.setDesc(string.format(misn_desc[2],misn_base,misn_base_sys))
|
||||
misn_stage = 1
|
||||
end
|
||||
end
|
||||
@ -72,13 +72,13 @@ function land()
|
||||
planet = space.landName()
|
||||
|
||||
if misn_stage == 1 and planet == misn_base then
|
||||
tk.msg( title[3], string.format(text[3],misn_target) )
|
||||
tk.msg(title[3], string.format(text[3],misn_target))
|
||||
misn.finish(true)
|
||||
end
|
||||
end
|
||||
|
||||
function kill()
|
||||
player.msg( msg_killdrone )
|
||||
player.msg(msg_killdrone)
|
||||
misn.finish(false)
|
||||
end
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
lang = lephisto.lang()
|
||||
if lang == "es" then
|
||||
-- Not translated atm
|
||||
else -- Default english
|
||||
-- Not translated atm.
|
||||
else -- Default english.
|
||||
misn_desc = "The Empire needs to ship %d tons of %s to %s in the %s system by %s (%s left)."
|
||||
misn_reward = "%d credits"
|
||||
title = {}
|
||||
@ -20,31 +20,31 @@ else -- Default english
|
||||
miss_timeup = "MISSION FAILED: You have failed to deliver the goods to the Empire on time!"
|
||||
end
|
||||
|
||||
-- Empire shipping missions are always timed, but quite lax on the schedules
|
||||
-- pays a bit more then the rush missions
|
||||
-- Empire shipping missions are always timed, but quite lax on the schedules.
|
||||
-- Pays a bit more then the rush missions.
|
||||
|
||||
-- Create the mission
|
||||
-- Create the mission.
|
||||
function create()
|
||||
-- Target destination
|
||||
-- Target destination.
|
||||
local i = 0
|
||||
repeat
|
||||
planet = space.getPlanet( misn.factions() )
|
||||
planet = space.getPlanet(misn.factions())
|
||||
i = i + 1
|
||||
until planet ~= space.landName() or i > 10
|
||||
-- Infinite loop protection
|
||||
-- Infinite loop protection.
|
||||
if i > 10 then
|
||||
misn.finish(false)
|
||||
end
|
||||
system = space.getSystem( planet )
|
||||
misn_dist = space.jumpDist(system)
|
||||
|
||||
-- Mission generics
|
||||
-- Mission generics.
|
||||
misn_type = "Cargo"
|
||||
i = rnd.int(1)
|
||||
misn.setTitle( string.format(title[i+1], planet) )
|
||||
misn.setTitle(string.format(title[i+1], planet))
|
||||
|
||||
-- More mission specifics
|
||||
carg_mass = rnd.int( 10, 30 )
|
||||
-- More mission specifics.
|
||||
carg_mass = rnd.int(10, 30)
|
||||
i = rnd.int(12)
|
||||
if i < 5 then
|
||||
carg_type = "Food"
|
||||
@ -60,36 +60,36 @@ function create()
|
||||
|
||||
misn_time = time.get() + time.units(5) +
|
||||
rnd.int(time.units(5), time.units(8)) * misn_dist
|
||||
misn.setDesc( string.format( misn_desc, carg_mass, carg_type, planet, system,
|
||||
time.str(misn_time), time.str(misn_time-time.get())) )
|
||||
misn.setDesc(string.format( misn_desc, carg_mass, carg_type, planet, system,
|
||||
time.str(misn_time), time.str(misn_time-time.get())))
|
||||
reward = misn_dist * carg_mass * (500+rnd.int(250)) +
|
||||
carg_mass * (250+rnd.int(150)) +
|
||||
rnd.int(2500)
|
||||
misn.setReward( string.format( misn_reward, reward ) )
|
||||
misn.setReward(string.format( misn_reward, reward))
|
||||
end
|
||||
|
||||
-- Mission is accepted
|
||||
-- Mission is accepted.
|
||||
function accept()
|
||||
if player.freeCargo() < carg_mass then
|
||||
tk.msg( full_title, string.format( full_msg, carg_mass-player.freeCargo() ))
|
||||
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting
|
||||
carg_id = player.addCargo( carg_type, carg_mass )
|
||||
tk.msg( accept_title, string.format( accept_msg, carg_mass, carg_type ))
|
||||
hook.land( "land" ) -- Only hook after accepting
|
||||
hook.time( "timeup" )
|
||||
tk.msg(full_title, string.format(full_msg, carg_mass-player.freeCargo()))
|
||||
elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting.
|
||||
carg_id = player.addCargo(carg_type, carg_mass)
|
||||
tk.msg(accept_title, string.format( accept_msg, carg_mass, carg_type))
|
||||
hook.land("land") -- Only hook after accepting.
|
||||
hook.time("timeup")
|
||||
else
|
||||
tk.msg( toomany_title, toomany_msg )
|
||||
tk.msg(toomany_title, toomany_msg)
|
||||
end
|
||||
end
|
||||
|
||||
-- Land hook
|
||||
-- Land hook.
|
||||
function land()
|
||||
if space.landName() == planet then
|
||||
if player.rmCargo( carg_id ) then
|
||||
player.pay( reward )
|
||||
tk.msg( finish_title, string.format( finish_msg, carg_type ))
|
||||
if player.rmCargo(carg_id) then
|
||||
player.pay(reward)
|
||||
tk.msg(finish_title, string.format(finish_msg, carg_type))
|
||||
|
||||
-- Increase empire shipping mission counter
|
||||
-- Increase empire shipping mission counter.
|
||||
n = var.peek("es_misn")
|
||||
if n ~= nil then
|
||||
var.push("es_misn", n+1)
|
||||
@ -99,18 +99,18 @@ function land()
|
||||
|
||||
misn.finish(true)
|
||||
else
|
||||
tk.msg( miss_title, string.format( miss_msg, carg_mass, carg_type ))
|
||||
tk.msg(miss_title, string.format( miss_msg, carg_mass, carg_type))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Time hook
|
||||
-- Time hook.
|
||||
function timeup()
|
||||
if time.get() > misn_time then
|
||||
player.msg( miss_timeup )
|
||||
player.msg(miss_timeup)
|
||||
misn.finish(false)
|
||||
end
|
||||
misn.setDesc( string.format( misn_desc, carg_mass, carg_type, planet, system,
|
||||
time.str(misn_time), time.str(misn_time-time.get())) )
|
||||
misn.setDesc(string.format( misn_desc, carg_mass, carg_type, planet, system,
|
||||
time.str(misn_time), time.str(misn_time-time.get())))
|
||||
end
|
||||
|
||||
|
@ -29,7 +29,7 @@ int pilots = 0;
|
||||
static int mpilots = 0;
|
||||
|
||||
extern Pilot* player;
|
||||
extern unsigned int combat_crating;
|
||||
extern unsigned int player_crating;
|
||||
|
||||
// Stack of fleets.
|
||||
static Fleet* fleet_stack = NULL;
|
||||
@ -261,7 +261,7 @@ void pilot_hit(Pilot* p, const Solid* w, const unsigned int shooter,
|
||||
if(!pilot_isFlag(p, PILOT_DEAD)) {
|
||||
pilot_dead(p);
|
||||
// Adjust the combat rating based on pilot mass.
|
||||
if(shooter == PLAYER_ID) combat_crating += MAX(1, p->ship->mass/50);
|
||||
if(shooter == PLAYER_ID) player_crating += MAX(1, p->ship->mass/50);
|
||||
}
|
||||
}
|
||||
|
||||
|
34
src/player.c
34
src/player.c
@ -44,7 +44,7 @@ static char** player_lstack = NULL; // Names of the planet the ships are at.
|
||||
static int player_nstack = 0;
|
||||
// Player global properties.
|
||||
char* player_name = NULL; // Player name.
|
||||
int combat_crating = 0; // Ze rating.
|
||||
int player_crating = 0; // Ze rating.
|
||||
unsigned int player_flags = 0; // Player flags.
|
||||
// Input.c
|
||||
double player_turn = 0.; // Turn velocity from input.
|
||||
@ -197,8 +197,8 @@ static void player_newMake(void) {
|
||||
// MONIEZZ!!!! -- We call these SCred AKA SaraCred. Lame right?
|
||||
tmp = cur->children;
|
||||
do {
|
||||
if(xml_isNode(tmp, "low")) l = xml_getInt(tmp);
|
||||
else if(xml_isNode(tmp, "high")) h = xml_getInt(tmp);
|
||||
xmlr_int(tmp, "low", l);
|
||||
xmlr_int(tmp, "high", h);
|
||||
} while(xml_nextNode(tmp));
|
||||
}
|
||||
else if(xml_isNode(cur, "system")) {
|
||||
@ -207,18 +207,16 @@ static void player_newMake(void) {
|
||||
// System name. TODO: Chance based on percentage.
|
||||
if(xml_isNode(tmp, "name")) snprintf(system, 20, xml_get(tmp));
|
||||
// Position.
|
||||
else if(xml_isNode(tmp, "x")) x = xml_getFloat(tmp);
|
||||
else if(xml_isNode(tmp, "y")) y = xml_getFloat(tmp);
|
||||
xmlr_float(tmp, "x", x);
|
||||
xmlr_float(tmp, "y", y);
|
||||
} while(xml_nextNode(tmp));
|
||||
}
|
||||
else if(xml_isNode(cur, "combat_crating"))
|
||||
combat_crating = xml_getInt(cur);
|
||||
|
||||
else if(xml_isNode(cur, "date")) {
|
||||
xmlr_int(cur, "player_crating", player_crating);
|
||||
if(xml_isNode(cur, "date")) {
|
||||
tmp = cur->children;
|
||||
do {
|
||||
if(xml_isNode(tmp, "low")) tl = xml_getInt(tmp);
|
||||
else if(xml_isNode(tmp, "high")) th = xml_getInt(tmp);
|
||||
xmlr_int(tmp, "low", tl);
|
||||
xmlr_int(tmp, "high", th);
|
||||
} while(xml_nextNode(tmp));
|
||||
}
|
||||
} while((cur = cur->next));
|
||||
@ -387,13 +385,13 @@ static char* player_ratings[] = {
|
||||
};
|
||||
|
||||
const char* player_rating(void) {
|
||||
if(combat_crating == 0) return player_ratings[0];
|
||||
else if(combat_crating < 50) return player_ratings[1];
|
||||
else if(combat_crating < 200) return player_ratings[2];
|
||||
else if(combat_crating < 500) return player_ratings[3];
|
||||
else if(combat_crating < 1000) return player_ratings[4];
|
||||
else if(combat_crating < 2500) return player_ratings[5];
|
||||
else if(combat_crating < 10000) return player_ratings[6];
|
||||
if(player_crating == 0) return player_ratings[0];
|
||||
else if(player_crating < 50) return player_ratings[1];
|
||||
else if(player_crating < 200) return player_ratings[2];
|
||||
else if(player_crating < 500) return player_ratings[3];
|
||||
else if(player_crating < 1000) return player_ratings[4];
|
||||
else if(player_crating < 2500) return player_ratings[5];
|
||||
else if(player_crating < 10000) return player_ratings[6];
|
||||
else return player_ratings[7];
|
||||
}
|
||||
|
||||
|
38
src/xml.h
38
src/xml.h
@ -1,6 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "libxml/parser.h"
|
||||
#include "libxml/xmlwriter.h"
|
||||
|
||||
#include "log.h"
|
||||
|
||||
#define XML_NODE_START 1
|
||||
#define XML_NODE_TEXT 3
|
||||
@ -20,3 +23,38 @@
|
||||
#define xml_getInt(n) (atoi((char*)(n)->children->content))
|
||||
#define xml_getFloat(n) (atof((char*)(n)->children->content))
|
||||
|
||||
// Reader crap.
|
||||
#define xmlr_int(n,s,i) \
|
||||
if(xml_isNode(n,s)) { i = xml_getInt(n); continue; }
|
||||
#define xmlr_float(n,s,f) \
|
||||
if(xml_isNode(n,s)) { f = xml_getFloat(n); continue; }
|
||||
|
||||
// Writer crap.
|
||||
|
||||
// Encompassing element.
|
||||
#define xmlw_startElem(w, str) \
|
||||
if(xmlTextWriterStartElement(w, str) < 0) { \
|
||||
ERR("xmlw: Unable to create start element"); return -1; }
|
||||
|
||||
#define xmlw_endElem(w) \
|
||||
if(xmlTextWriterEndElement(w) < 0) { \
|
||||
ERR("xmlw: Unable to create end element"); return -1; }
|
||||
|
||||
// Other stuff.
|
||||
#define xmlw_elem(w, n, str, args...) \
|
||||
if(xmlTextWriteFormatElement(w, n, str, ## args) < 0) { \
|
||||
ERR("xmlw: Unable to write format element"); return -1; }
|
||||
|
||||
#define xmlw_attr(w, str, val) \
|
||||
if(xmlTextWriteAttribute(w, str, val) < 0) { \
|
||||
ERR("xmlw: Unable to write element attribute"); return -1; }
|
||||
|
||||
// Document level.
|
||||
#define xmlw_start(w) \
|
||||
if(xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL) < 0) { \
|
||||
ERR("xmlw: Unable to start document"); return -1; }
|
||||
|
||||
#define xmlw_done(w) \
|
||||
if(xmlTextWriterEndDocument(w) < 0) { \
|
||||
ERR("xmlw: Unable to end document"); return -1; }
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user